hc
2024-05-10 cde9070d9970eef1f7ec2360586c802a16230ad8
kernel/net/tls/tls_main.c
....@@ -92,7 +92,8 @@
9292 break;
9393 }
9494
95
- if (sk_wait_event(sk, timeo, !sk->sk_write_pending, &wait))
95
+ if (sk_wait_event(sk, timeo,
96
+ !READ_ONCE(sk->sk_write_pending), &wait))
9697 break;
9798 }
9899 remove_wait_queue(sk_sleep(sk), &wait);
....@@ -386,13 +387,11 @@
386387 rc = -EINVAL;
387388 goto out;
388389 }
389
- lock_sock(sk);
390390 memcpy(crypto_info_aes_gcm_128->iv,
391391 cctx->iv + TLS_CIPHER_AES_GCM_128_SALT_SIZE,
392392 TLS_CIPHER_AES_GCM_128_IV_SIZE);
393393 memcpy(crypto_info_aes_gcm_128->rec_seq, cctx->rec_seq,
394394 TLS_CIPHER_AES_GCM_128_REC_SEQ_SIZE);
395
- release_sock(sk);
396395 if (copy_to_user(optval,
397396 crypto_info_aes_gcm_128,
398397 sizeof(*crypto_info_aes_gcm_128)))
....@@ -410,13 +409,11 @@
410409 rc = -EINVAL;
411410 goto out;
412411 }
413
- lock_sock(sk);
414412 memcpy(crypto_info_aes_gcm_256->iv,
415413 cctx->iv + TLS_CIPHER_AES_GCM_256_SALT_SIZE,
416414 TLS_CIPHER_AES_GCM_256_IV_SIZE);
417415 memcpy(crypto_info_aes_gcm_256->rec_seq, cctx->rec_seq,
418416 TLS_CIPHER_AES_GCM_256_REC_SEQ_SIZE);
419
- release_sock(sk);
420417 if (copy_to_user(optval,
421418 crypto_info_aes_gcm_256,
422419 sizeof(*crypto_info_aes_gcm_256)))
....@@ -436,6 +433,8 @@
436433 {
437434 int rc = 0;
438435
436
+ lock_sock(sk);
437
+
439438 switch (optname) {
440439 case TLS_TX:
441440 case TLS_RX:
....@@ -446,6 +445,9 @@
446445 rc = -ENOPROTOOPT;
447446 break;
448447 }
448
+
449
+ release_sock(sk);
450
+
449451 return rc;
450452 }
451453