@@ -53,7 +53,6 @@ static int tls_do_decryption(struct sock *sk,
53
53
{
54
54
struct tls_context * tls_ctx = tls_get_ctx (sk );
55
55
struct tls_sw_context_rx * ctx = tls_sw_ctx_rx (tls_ctx );
56
- struct strp_msg * rxm = strp_msg (skb );
57
56
struct aead_request * aead_req ;
58
57
59
58
int ret ;
@@ -71,18 +70,6 @@ static int tls_do_decryption(struct sock *sk,
71
70
72
71
ret = crypto_wait_req (crypto_aead_decrypt (aead_req ), & ctx -> async_wait );
73
72
74
- if (ret < 0 )
75
- goto out ;
76
-
77
- rxm -> offset += tls_ctx -> rx .prepend_size ;
78
- rxm -> full_len -= tls_ctx -> rx .overhead_size ;
79
- tls_advance_record_sn (sk , & tls_ctx -> rx );
80
-
81
- ctx -> decrypted = true;
82
-
83
- ctx -> saved_data_ready (sk );
84
-
85
- out :
86
73
aead_request_free (aead_req );
87
74
return ret ;
88
75
}
@@ -666,8 +653,29 @@ static struct sk_buff *tls_wait_data(struct sock *sk, int flags,
666
653
return skb ;
667
654
}
668
655
669
- static int decrypt_skb (struct sock * sk , struct sk_buff * skb ,
670
- struct scatterlist * sgout )
656
+ static int decrypt_skb_update (struct sock * sk , struct sk_buff * skb ,
657
+ struct scatterlist * sgout )
658
+ {
659
+ struct tls_context * tls_ctx = tls_get_ctx (sk );
660
+ struct tls_sw_context_rx * ctx = tls_sw_ctx_rx (tls_ctx );
661
+ struct strp_msg * rxm = strp_msg (skb );
662
+ int err = 0 ;
663
+
664
+ err = decrypt_skb (sk , skb , sgout );
665
+ if (err < 0 )
666
+ return err ;
667
+
668
+ rxm -> offset += tls_ctx -> rx .prepend_size ;
669
+ rxm -> full_len -= tls_ctx -> rx .overhead_size ;
670
+ tls_advance_record_sn (sk , & tls_ctx -> rx );
671
+ ctx -> decrypted = true;
672
+ ctx -> saved_data_ready (sk );
673
+
674
+ return err ;
675
+ }
676
+
677
+ int decrypt_skb (struct sock * sk , struct sk_buff * skb ,
678
+ struct scatterlist * sgout )
671
679
{
672
680
struct tls_context * tls_ctx = tls_get_ctx (sk );
673
681
struct tls_sw_context_rx * ctx = tls_sw_ctx_rx (tls_ctx );
@@ -812,7 +820,7 @@ int tls_sw_recvmsg(struct sock *sk,
812
820
if (err < 0 )
813
821
goto fallback_to_reg_recv ;
814
822
815
- err = decrypt_skb (sk , skb , sgin );
823
+ err = decrypt_skb_update (sk , skb , sgin );
816
824
for (; pages > 0 ; pages -- )
817
825
put_page (sg_page (& sgin [pages ]));
818
826
if (err < 0 ) {
@@ -821,7 +829,7 @@ int tls_sw_recvmsg(struct sock *sk,
821
829
}
822
830
} else {
823
831
fallback_to_reg_recv :
824
- err = decrypt_skb (sk , skb , NULL );
832
+ err = decrypt_skb_update (sk , skb , NULL );
825
833
if (err < 0 ) {
826
834
tls_err_abort (sk , EBADMSG );
827
835
goto recv_end ;
@@ -892,7 +900,7 @@ ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos,
892
900
}
893
901
894
902
if (!ctx -> decrypted ) {
895
- err = decrypt_skb (sk , skb , NULL );
903
+ err = decrypt_skb_update (sk , skb , NULL );
896
904
897
905
if (err < 0 ) {
898
906
tls_err_abort (sk , EBADMSG );
0 commit comments