lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <42f2d707-cf7e-4cb7-a10b-8bd2e851879e@linux.ibm.com>
Date: Wed, 21 Aug 2024 07:41:18 +0200
From: Jan Karcher <jaka@...ux.ibm.com>
To: Paolo Abeni <pabeni@...hat.com>, Jeongjun Park <aha310510@...il.com>,
        wenjia@...ux.ibm.com, alibuda@...ux.alibaba.com,
        tonylu@...ux.alibaba.com, guwen@...ux.alibaba.com
Cc: davem@...emloft.net, edumazet@...gle.com, kuba@...nel.org,
        dust.li@...ux.alibaba.com, ubraun@...ux.vnet.ibm.com,
        utz.bacher@...ibm.com, linux-s390@...r.kernel.org,
        netdev@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH net,v5,2/2] net/smc: modify smc_sock structure



On 20/08/2024 12:45, Paolo Abeni wrote:
> 
> 
> On 8/15/24 06:39, Jeongjun Park wrote:
>> Since inet_sk(sk)->pinet6 and smc_sk(sk)->clcsock practically
>> point to the same address, when smc_create_clcsk() stores the newly
>> created clcsock in smc_sk(sk)->clcsock, inet_sk(sk)->pinet6 is corrupted
>> into clcsock. This causes NULL pointer dereference and various other
>> memory corruptions.
>>
>> To solve this, we need to modify the smc_sock structure.
>>
>> Fixes: ac7138746e14 ("smc: establish new socket family")
>> Signed-off-by: Jeongjun Park <aha310510@...il.com>
>> ---
>>   net/smc/smc.h | 5 ++++-
>>   1 file changed, 4 insertions(+), 1 deletion(-)
>>
>> diff --git a/net/smc/smc.h b/net/smc/smc.h
>> index 34b781e463c4..0d67a02a6ab1 100644
>> --- a/net/smc/smc.h
>> +++ b/net/smc/smc.h
>> @@ -283,7 +283,10 @@ struct smc_connection {
>>   };
>>   struct smc_sock {                /* smc sock container */
>> -    struct sock        sk;
>> +    union {
>> +        struct sock        sk;
>> +        struct inet_sock    inet;
>> +    };
>>       struct socket        *clcsock;    /* internal tcp socket */
>>       void            (*clcsk_state_change)(struct sock *sk);
>>                           /* original stat_change fct. */
> 
> As per the running discussion here:
> 
> https://lore.kernel.org/all/5ad4de6f-48d4-4d1b-b062-e1cd2e8b3600@linux.ibm.com/#t
> 
> you should include at least a add a comment to the union, describing 
> which one is used in which case.
> 
> My personal preference would be directly replacing 'struct sk' with
> 'struct inet_sock inet;' and adjust all the smc->sk access accordingly, 
> likely via a new helper.
> 
> I understand that would be much more invasive, but would align with 
> other AF.

Hi all,

thanks for looking into this patch and providing your view on this topic.

My personal prefernce is clean. I want to have a clean SMC protocol, in 
order to get it on a good path for future improvements.
The union, IMO, is not clean. It makes the problem less implicit but the 
problem is still there.

Jeongjun, do i understand correct that you've tested the change proposed 
by Alexandra with more changes required?

"""
Although this fix would require more code changes, we tested the bug and
confirmed that it was not triggered and the functionality was working
normally.
"""
https://lore.kernel.org/all/20240814150558.46178-1-aha310510@gmail.com/

If so would you mind adding a helper for this check as Paolo suggested 
and send it?
This way we see which change is better for the future.

The statement that SMC would be more aligned with other AFs is already a 
  big win in my book.

Thanks
- Jan

> 
> Thanks,
> 
> Paolo
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ