From: Martin Schiller <ms@dev.tdt.de>
To: David Lee <david.lee@trailofbits.com>
Cc: "David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>,
Dominik 'Disconnect3d' Czarnota
<dominik.czarnota@trailofbits.com>,
linux-x25@vger.kernel.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH net] net/x25: fix use-after-free in x25_kill_by_neigh()
Date: Tue, 14 Jul 2026 08:42:19 +0200 (CEST) [thread overview]
Message-ID: <aa5405c3a539422e79ae24bc2e41e6f1@dev.tdt.de> (raw)
In-Reply-To: <20260713104752.241175-1-david.lee@trailofbits.com>
On 2026-07-13 12:47, David Lee wrote:
> x25_kill_by_neigh() walks the global X.25 socket list looking for
> sockets
> attached to a terminating neighbour. x25_list_lock protects list
> membership
> while the lookup is in progress, but it does not pin a socket's
> lifetime
> after the lock is dropped.
>
> The function currently drops x25_list_lock before calling lock_sock(s).
> A
> concurrent close can run x25_release(), remove the same socket from
> x25_list, and drop the last socket reference in that window. The
> neighbour
> teardown path can then lock or inspect a freed struct sock/struct
> x25_sock.
>
> Take sock_hold(s) while x25_list_lock still proves that the list entry
> is
> live, then drop the temporary reference after the socket has been
> locked,
> rechecked, and released. Recheck x25_sk(s)->neighbour after
> lock_sock(),
> because another path may have disconnected the socket before this path
> acquired the socket lock. Restart the list walk after each disconnect
> because the list lock was dropped and the previous iterator state may
> no
> longer be valid.
>
> A QEMU/KASAN run against origin/master reproduced a slab-use-after-free
> in
> x25_kill_by_neigh().
>
> Fixes: 7781607938c8 ("net/x25: Fix null-ptr-deref caused by
> x25_disconnect")
> Cc: stable@vger.kernel.org
> Signed-off-by: David Lee <david.lee@trailofbits.com>
> Assisted-by: Codex:gpt-5.5
> ---
> Trail of Bits has a reproducer that triggers kernel panic
> demonstrating the bug, and can share it if needed.
>
> net/x25/af_x25.c | 8 ++++++--
> 1 file changed, 6 insertions(+), 2 deletions(-)
>
> diff --git a/net/x25/af_x25.c b/net/x25/af_x25.c
> index c31d2af5dd22..8aae9273b7c1 100644
> --- a/net/x25/af_x25.c
> +++ b/net/x25/af_x25.c
> @@ -1768,15 +1768,19 @@ void x25_kill_by_neigh(struct x25_neigh *nb)
> {
> struct sock *s;
>
> +again:
> write_lock_bh(&x25_list_lock);
>
> sk_for_each(s, &x25_list) {
> if (x25_sk(s)->neighbour == nb) {
> + sock_hold(s);
> write_unlock_bh(&x25_list_lock);
> lock_sock(s);
> - x25_disconnect(s, ENETUNREACH, 0, 0);
> + if (x25_sk(s)->neighbour == nb)
> + x25_disconnect(s, ENETUNREACH, 0, 0);
> release_sock(s);
> - write_lock_bh(&x25_list_lock);
> + sock_put(s);
> + goto again;
> }
> }
> write_unlock_bh(&x25_list_lock);
LGTM, Thanks.
Acked-by: Martin Schiller <ms@dev.tdt.de>
prev parent reply other threads:[~2026-07-14 6:42 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-13 10:47 [PATCH net] net/x25: fix use-after-free in x25_kill_by_neigh() David Lee
2026-07-14 6:42 ` Martin Schiller [this message]
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=aa5405c3a539422e79ae24bc2e41e6f1@dev.tdt.de \
--to=ms@dev.tdt.de \
--cc=davem@davemloft.net \
--cc=david.lee@trailofbits.com \
--cc=dominik.czarnota@trailofbits.com \
--cc=edumazet@google.com \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-x25@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=stable@vger.kernel.org \
/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.