From: Steffen Klassert <steffen.klassert@secunet.com>
To: Siwei Zhang <oss@fourdim.xyz>
Cc: <netdev@vger.kernel.org>,
Herbert Xu <herbert@gondor.apana.org.au>,
"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>,
Siwei Zhang <fourdizhang@tencent.com>, <stable@vger.kernel.org>
Subject: Re: [PATCH net v2 1/1] xfrm: use hlist_del_init_rcu for state_cache and state_cache_input
Date: Mon, 17 Aug 2026 10:30:26 +0200 [thread overview]
Message-ID: <aoLGokLlBCkXd6uT@secunet.com> (raw)
In-Reply-To: <20260730114028.1077499-2-oss@fourdim.xyz>
On Thu, Jul 30, 2026 at 07:40:08PM +0800, Siwei Zhang wrote:
> From: Siwei Zhang <fourdizhang@tencent.com>
>
> Commit 14acf9652e56 ("xfrm: defensively unhash xfrm_state lists in
> __xfrm_state_delete") converted bydst/bysrc/byseq/byspi from
> hlist_del_rcu() to hlist_del_init_rcu() so that a second
> __xfrm_state_delete() on the same object becomes a no-op rather than a
> write through LIST_POISON pprev. It missed state_cache and
> state_cache_input, which kept hlist_del_rcu():
>
> - hlist_del_rcu() leaves pprev = LIST_POISON2 (non-NULL), so
> hlist_unhashed() returns false.
> - hlist_del_init_rcu() leaves pprev = NULL, so hlist_unhashed()
> returns true.
>
> A second __xfrm_state_delete() therefore enters __hlist_del() on the
> already-deleted state_cache/state_cache_input nodes and does
> WRITE_ONCE(*pprev, next) through LIST_POISON2 — a write use-after-free
> once the slab is reused. The corruption can in turn cause a subsequent
> hlist_for_each_entry_rcu traversal to follow a dangling next pointer,
> producing the read use-after-free reported in xfrm_input_state_lookup().
>
> Switch state_cache and state_cache_input to hlist_del_init_rcu() to
> match the other four lists, closing the write use-after-free and, with
> it, the read use-after-free it spawns.
>
> Assisted-by: CodeBuddy:GLM-5.2
> Fixes: 0045e3d80613 ("xfrm: Cache used outbound xfrm states at the policy.")
> Fixes: 81a331a0e72d ("xfrm: Add an inbound percpu state cache.")
> Cc: stable@vger.kernel.org
> Signed-off-by: Siwei Zhang <fourdizhang@tencent.com>
> ---
> net/xfrm/xfrm_state.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
> index 36a4f6793ede..f494c1ac57a4 100644
> --- a/net/xfrm/xfrm_state.c
> +++ b/net/xfrm/xfrm_state.c
> @@ -823,9 +823,9 @@ int __xfrm_state_delete(struct xfrm_state *x)
> if (!hlist_unhashed(&x->byseq))
> hlist_del_init_rcu(&x->byseq);
> if (!hlist_unhashed(&x->state_cache))
> - hlist_del_rcu(&x->state_cache);
> + hlist_del_init_rcu(&x->state_cache);
> if (!hlist_unhashed(&x->state_cache_input))
> - hlist_del_rcu(&x->state_cache_input);
> + hlist_del_init_rcu(&x->state_cache_input);
>
> if (!hlist_unhashed(&x->byspi))
> hlist_del_init_rcu(&x->byspi);
What is the difference between v1 and v2 of your patch?
Both look identical to me.
prev parent reply other threads:[~2026-08-17 8:30 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-30 11:40 [PATCH net v2 0/1] xfrm: use hlist_del_init_rcu for state_cache and state_cache_input Siwei Zhang
2026-07-30 11:40 ` [PATCH net v2 1/1] " Siwei Zhang
2026-08-17 8:30 ` Steffen Klassert [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=aoLGokLlBCkXd6uT@secunet.com \
--to=steffen.klassert@secunet.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=fourdizhang@tencent.com \
--cc=herbert@gondor.apana.org.au \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=oss@fourdim.xyz \
--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.