@@ -1421,16 +1421,15 @@ static int decrypt_skb_update(struct sock *sk, struct sk_buff *skb,
1421
1421
1422
1422
return err ;
1423
1423
}
1424
+ rxm -> offset += tls_ctx -> rx .prepend_size ;
1425
+ rxm -> full_len -= tls_ctx -> rx .overhead_size ;
1426
+ tls_advance_record_sn (sk , & tls_ctx -> rx );
1427
+ ctx -> decrypted = true;
1428
+ ctx -> saved_data_ready (sk );
1424
1429
} else {
1425
1430
* zc = false;
1426
1431
}
1427
1432
1428
- rxm -> offset += tls_ctx -> rx .prepend_size ;
1429
- rxm -> full_len -= tls_ctx -> rx .overhead_size ;
1430
- tls_advance_record_sn (sk , & tls_ctx -> rx );
1431
- ctx -> decrypted = true;
1432
- ctx -> saved_data_ready (sk );
1433
-
1434
1433
return err ;
1435
1434
}
1436
1435
@@ -1609,6 +1608,25 @@ int tls_sw_recvmsg(struct sock *sk,
1609
1608
1610
1609
rxm = strp_msg (skb );
1611
1610
1611
+ to_decrypt = rxm -> full_len - tls_ctx -> rx .overhead_size ;
1612
+
1613
+ if (to_decrypt <= len && !is_kvec && !is_peek &&
1614
+ ctx -> control == TLS_RECORD_TYPE_DATA )
1615
+ zc = true;
1616
+
1617
+ err = decrypt_skb_update (sk , skb , & msg -> msg_iter ,
1618
+ & chunk , & zc , ctx -> async_capable );
1619
+ if (err < 0 && err != - EINPROGRESS ) {
1620
+ tls_err_abort (sk , EBADMSG );
1621
+ goto recv_end ;
1622
+ }
1623
+
1624
+ if (err == - EINPROGRESS ) {
1625
+ async = true;
1626
+ num_async ++ ;
1627
+ goto pick_next_record ;
1628
+ }
1629
+
1612
1630
if (!cmsg ) {
1613
1631
int cerr ;
1614
1632
@@ -1626,40 +1644,22 @@ int tls_sw_recvmsg(struct sock *sk,
1626
1644
goto recv_end ;
1627
1645
}
1628
1646
1629
- to_decrypt = rxm -> full_len - tls_ctx -> rx .overhead_size ;
1630
-
1631
- if (to_decrypt <= len && !is_kvec && !is_peek )
1632
- zc = true;
1633
-
1634
- err = decrypt_skb_update (sk , skb , & msg -> msg_iter ,
1635
- & chunk , & zc , ctx -> async_capable );
1636
- if (err < 0 && err != - EINPROGRESS ) {
1637
- tls_err_abort (sk , EBADMSG );
1638
- goto recv_end ;
1639
- }
1640
-
1641
- if (err == - EINPROGRESS ) {
1642
- async = true;
1643
- num_async ++ ;
1644
- goto pick_next_record ;
1645
- } else {
1646
- if (!zc ) {
1647
- if (rxm -> full_len > len ) {
1648
- retain_skb = true;
1649
- chunk = len ;
1650
- } else {
1651
- chunk = rxm -> full_len ;
1652
- }
1647
+ if (!zc ) {
1648
+ if (rxm -> full_len > len ) {
1649
+ retain_skb = true;
1650
+ chunk = len ;
1651
+ } else {
1652
+ chunk = rxm -> full_len ;
1653
+ }
1653
1654
1654
- err = skb_copy_datagram_msg (skb , rxm -> offset ,
1655
- msg , chunk );
1656
- if (err < 0 )
1657
- goto recv_end ;
1655
+ err = skb_copy_datagram_msg (skb , rxm -> offset ,
1656
+ msg , chunk );
1657
+ if (err < 0 )
1658
+ goto recv_end ;
1658
1659
1659
- if (!is_peek ) {
1660
- rxm -> offset = rxm -> offset + chunk ;
1661
- rxm -> full_len = rxm -> full_len - chunk ;
1662
- }
1660
+ if (!is_peek ) {
1661
+ rxm -> offset = rxm -> offset + chunk ;
1662
+ rxm -> full_len = rxm -> full_len - chunk ;
1663
1663
}
1664
1664
}
1665
1665
@@ -1759,15 +1759,15 @@ ssize_t tls_sw_splice_read(struct socket *sock, loff_t *ppos,
1759
1759
if (!skb )
1760
1760
goto splice_read_end ;
1761
1761
1762
- /* splice does not support reading control messages */
1763
- if (ctx -> control != TLS_RECORD_TYPE_DATA ) {
1764
- err = - ENOTSUPP ;
1765
- goto splice_read_end ;
1766
- }
1767
-
1768
1762
if (!ctx -> decrypted ) {
1769
1763
err = decrypt_skb_update (sk , skb , NULL , & chunk , & zc , false);
1770
1764
1765
+ /* splice does not support reading control messages */
1766
+ if (ctx -> control != TLS_RECORD_TYPE_DATA ) {
1767
+ err = - ENOTSUPP ;
1768
+ goto splice_read_end ;
1769
+ }
1770
+
1771
1771
if (err < 0 ) {
1772
1772
tls_err_abort (sk , EBADMSG );
1773
1773
goto splice_read_end ;
0 commit comments