Subject: Re: [PATCH net-next v3 7/7] tls: rx: do not use the standard strparser

From: Tariq Toukan <[email-masked]>
Date: Mon, 8 Aug 2022 08:24:05 +0300

On 8/7/2022 9:01 AM, Tariq Toukan wrote:
> 
> 
> On 8/4/2022 6:59 PM, Jakub Kicinski wrote:
>> On Thu, 4 Aug 2022 11:05:18 +0300 Tariq Toukan wrote:
>>>>        trace_tls_device_decrypted(sk, tcp_sk(sk)->copied_seq - 
>>>> rxm->full_len,
>>>
>>> Now we see a different trace:
>>>
>>> ------------[ cut here ]------------
>>> WARNING: CPU: 4 PID: 45887 at net/tls/tls_strp.c:53
>>
>> OK, if you find another I promise I'll try to hassle a machine with
>> offload from somewhere... here's the fix for the new one:
>>
>> --->8----------------
>> tls: rx: device: don't try to copy too much on detach
>>
>> Another device offload bug, we use the length of the output
>> skb as an indication of how much data to copy. But that skb
>> is sized to offset + record length, and we start from offset.
>> So we end up double-counting the offset which leads to
>> skb_copy_bits() returning -EFAULT.
>>
>> Reported-by: Tariq Toukan <[email-masked]>
>> Fixes: 84c61fe1a75b ("tls: rx: do not use the standard strparser")
>> Signed-off-by: Jakub Kicinski <[email-masked]>
>> ---
>>   net/tls/tls_strp.c | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/net/tls/tls_strp.c b/net/tls/tls_strp.c
>> index f0b7c9122fba..9b79e334dbd9 100644
>> --- a/net/tls/tls_strp.c
>> +++ b/net/tls/tls_strp.c
>> @@ -41,7 +41,7 @@ static struct sk_buff *tls_strp_msg_make_copy(struct 
>> tls_strparser *strp)
>>       struct sk_buff *skb;
>>       int i, err, offset;
>> -    skb = alloc_skb_with_frags(0, strp->anchor->len, TLS_PAGE_ORDER,
>> +    skb = alloc_skb_with_frags(0, strp->stm.full_len, TLS_PAGE_ORDER,
>>                      &err, strp->sk->sk_allocation);
>>       if (!skb)
>>           return NULL;
> 
> Hi Jakub,
> Thanks for the patch.
> We're testing it and I'll update.

Trace is gone. But we got TlsDecryptError counter increasing by 2.