From: Dust Li <dust.li@linux.alibaba.com>
To: Chengfeng Ye <nicoyip.dev@gmail.com>,
"D . Wythe" <alibuda@linux.alibaba.com>,
Sidraya Jayagond <sidraya@linux.ibm.com>,
Mahanta Jambigi <mjambigi@linux.ibm.com>
Cc: Tony Lu <tonylu@linux.alibaba.com>,
Wen Gu <guwen@linux.alibaba.com>,
"David S . Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@kernel.org>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
linux-rdma@vger.kernel.org, linux-s390@vger.kernel.org,
netdev@vger.kernel.org, linux-kernel@vger.kernel.org,
stable@vger.kernel.org
Subject: Re: [PATCH net v3] net/smc: protect clcsock lifetime in smc_getname
Date: Thu, 8 Oct 2026 23:48:42 +0800 [thread overview]
Message-ID: <ase7WgfRaX01wNxQ@linux.alibaba.com> (raw)
In-Reply-To: <20261008084444.787449-1-nicoyip.dev@gmail.com>
On 2026-10-08 16:44:44, Chengfeng Ye wrote:
>smc_getname() dereferences smc->clcsock without holding
>clcsock_release_lock. Link-group termination can release the CLC socket
>through smc_close_active_abort() while the SMC socket is still open,
>for example after shutdown(SHUT_WR).
>
>A getsockname() caller can load smc->clcsock, then the termination worker
>can clear the pointer and call sock_release() before the caller accesses
>clcsock->ops or invokes getname(). This causes a use-after-free; if the
>worker clears the pointer before the load, it causes a NULL dereference.
>The syscall's file reference keeps the SMC socket alive but does not
>prevent asynchronous release of its CLC socket.
>
>KASAN reported the following with test-only timing instrumentation:
>
> BUG: KASAN: slab-use-after-free in smc_getname+0x19e/0x1b0
> Read of size 8 at addr ffff888109abb4e0 by task poc/103
> Call Trace:
> smc_getname+0x19e/0x1b0
> do_getsockname+0xe5/0x170
> __sys_getsockname+0x8c/0x100
>
> Allocated by task 95:
> sock_alloc_inode+0x1e/0x280
> sock_alloc+0x3d/0x240
> __sock_create+0x7e/0x430
> smc_create+0x121/0x240
>
> Freed by task 0:
> kmem_cache_free+0xcc/0x340
> rcu_core+0x50a/0x1850
>
> Last potentially related work creation:
> evict+0x446/0x6c0
> smc_clcsock_release+0xa8/0xd0
> smc_close_active_abort+0x26a/0x3a0
> __smc_lgr_terminate.part.0+0x137/0x2e0
>
>Hold clcsock_release_lock across the pointer check and the getname()
>callback to serialize with smc_clcsock_release(). Return -EBADF if the
>CLC socket has already been released, preserving the existing peer
>state check and the callback's return value otherwise.
>
>Fixes: b03faa1fafc8 ("net/smc: postpone release of clcsock")
>Cc: stable@vger.kernel.org
>Assisted-by: GPT-6.1-Sol
>Signed-off-by: Chengfeng Ye <nicoyip.dev@gmail.com>
>---
>Changes in v3:
>- Limit the fix to smc_getname(), as requested by Mahanta. The code
> change is identical to v1 and uses the existing release mutex.
>- Drop the new clcsock_lock and the other v2 changes. Mahanta will
> address the other readers through the broader CLC lifetime changes
> discussed with Dust Li.
>- Rebase onto current net/main; keep the stable Cc.
Agree on the current fix.
Reviewed-by: Dust Li <dust.li@linux.alibaba.com>
Best regards,
Dust
next prev parent reply other threads:[~2026-10-08 15:48 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-08 8:44 [PATCH net v3] net/smc: protect clcsock lifetime in smc_getname Chengfeng Ye
2026-10-08 8:53 ` Mahanta Jambigi
2026-10-08 9:00 ` sashiko-bot
2026-10-08 15:48 ` Dust Li [this message]
2026-10-08 18:50 ` patchwork-bot+netdevbpf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ase7WgfRaX01wNxQ@linux.alibaba.com \
--to=dust.li@linux.alibaba.com \
--cc=alibuda@linux.alibaba.com \
--cc=davem@davemloft.net \
--cc=edumazet@kernel.org \
--cc=guwen@linux.alibaba.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=linux-s390@vger.kernel.org \
--cc=mjambigi@linux.ibm.com \
--cc=netdev@vger.kernel.org \
--cc=nicoyip.dev@gmail.com \
--cc=pabeni@redhat.com \
--cc=sidraya@linux.ibm.com \
--cc=stable@vger.kernel.org \
--cc=tonylu@linux.alibaba.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.