From: Steffen Klassert <steffen.klassert@secunet.com>
To: David Miller <davem@davemloft.net>, Jakub Kicinski <kuba@kernel.org>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
Steffen Klassert <steffen.klassert@secunet.com>,
<netdev@vger.kernel.org>
Subject: [PATCH 08/10] xfrm: fix xfrm_state_construct() auth-trunc leak
Date: Tue, 18 Aug 2026 11:28:39 +0200 [thread overview]
Message-ID: <20260818092920.653034-9-steffen.klassert@secunet.com> (raw)
In-Reply-To: <20260818092920.653034-1-steffen.klassert@secunet.com>
From: Zihan Xi <zihanx@nebusec.ai>
attach_auth_trunc() can allocate x->aalg while leaving
x->props.aalgo at zero when the selected auth algorithm has no
sadb_alg_id. One real case is cmac(aes).
xfrm_state_construct() then treats !x->props.aalgo as "no auth
algorithm attached yet" and calls attach_auth(). That overwrites
x->aalg and loses the first allocation. Any later failure or teardown
only frees the replacement pointer.
Check whether x->aalg is already attached instead of inferring that
state from x->props.aalgo.
Fixes: 4447bb33f094 ("xfrm: Store aalg in xfrm_state with a user specified truncation length")
Cc: stable@vger.kernel.org
Reported-by: Vega <vega@nebusec.ai>
Assisted-by: Codex:gpt-5.4
Signed-off-by: Zihan Xi <zihanx@nebusec.ai>
Signed-off-by: Ren Wei <enjou1224z@gmail.com>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
---
net/xfrm/xfrm_user.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/xfrm/xfrm_user.c b/net/xfrm/xfrm_user.c
index d6db63304ba6..6266a92cf302 100644
--- a/net/xfrm/xfrm_user.c
+++ b/net/xfrm/xfrm_user.c
@@ -940,7 +940,7 @@ static struct xfrm_state *xfrm_state_construct(struct net *net,
if ((err = attach_auth_trunc(&x->aalg, &x->props.aalgo,
attrs[XFRMA_ALG_AUTH_TRUNC], extack)))
goto error;
- if (!x->props.aalgo) {
+ if (!x->aalg) {
if ((err = attach_auth(&x->aalg, &x->props.aalgo,
attrs[XFRMA_ALG_AUTH], extack)))
goto error;
--
2.43.0
next prev parent reply other threads:[~2026-08-18 9:29 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-18 9:28 [PATCH 0/10] pull request (net): ipsec 2026-08-18 Steffen Klassert
2026-08-18 9:28 ` [PATCH 01/10] xfrm6: fix out-of-bounds write in xfrm6_input_addr() when secpath is full Steffen Klassert
2026-08-18 9:28 ` [PATCH 02/10] esp: do not unref managed frag pages in esp_ssg_unref() Steffen Klassert
2026-08-18 9:28 ` [PATCH 03/10] xfrm: espintcp: fix UAF during close Steffen Klassert
2026-08-18 9:28 ` [PATCH 04/10] xfrm: drop ESP-in-TCP packets with no ingress device Steffen Klassert
2026-08-18 9:28 ` [PATCH 05/10] xfrm: avoid lock inversion in nat keepalive work Steffen Klassert
2026-08-18 9:28 ` [PATCH 06/10] xfrm: Fix skb double-free in xfrm_dev_direct_output() Steffen Klassert
2026-08-18 9:28 ` [PATCH 07/10] xfrm: ah6: validate routing header segments_left Steffen Klassert
2026-08-18 9:28 ` Steffen Klassert [this message]
2026-08-18 9:28 ` [PATCH 09/10] Revert "esp: do not unref managed frag pages in esp_ssg_unref()" Steffen Klassert
2026-08-18 9:28 ` [PATCH 10/10] xfrm: bound nat keepalive state collection Steffen Klassert
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=20260818092920.653034-9-steffen.klassert@secunet.com \
--to=steffen.klassert@secunet.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=kuba@kernel.org \
--cc=netdev@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox