From: Steffen Klassert <steffen.klassert@secunet.com>
To: Michael Bommarito <michael.bommarito@gmail.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>,
<netdev@vger.kernel.org>,
"David S . Miller" <davem@davemloft.net>,
David Ahern <dsahern@kernel.org>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
Simon Horman <horms@kernel.org>, Fan Du <fan.du@windriver.com>,
<linux-kernel@vger.kernel.org>, <stable@vger.kernel.org>
Subject: Re: [PATCH] xfrm: ah: account for ESN high bits in async callbacks
Date: Tue, 21 Apr 2026 15:31:26 +0200 [thread overview]
Message-ID: <aed8Lsf0DSAPX1E9@secunet.com> (raw)
In-Reply-To: <20260419223542.2293727-1-michael.bommarito@gmail.com>
On Sun, Apr 19, 2026 at 06:35:42PM -0400, Michael Bommarito wrote:
> AH allocates its temporary auth/ICV layout differently when ESN is enabled:
> the async ahash setup appends a 4-byte seqhi slot before the ICV or
> auth_data area, but the async completion callbacks still reconstruct the
> temporary layout as if seqhi were absent.
>
> With an async AH implementation selected, that makes AH copy or compare
> the wrong bytes on both the IPv4 and IPv6 paths. In UML repro on IPv4 AH
> with ESN and forced async hmac(sha1), ping fails with 100% packet loss,
> and the callback logs show the pre-fix drift:
>
> ah4 output_done: esn=1 err=0 icv_off=20 expected_off=24
> ah4 input_done: esn=1 auth_off=20 expected_auth_off=24 icv_off=32 expected_icv_off=36
>
> Reconstruct the callback-side layout the same way the setup path built it
> by skipping the ESN seqhi slot before locating the saved auth_data or ICV.
> Per RFC 4302, the ESN high-order 32 bits participate in the AH ICV
> computation, so the async callbacks must account for the seqhi slot.
>
> Post-fix, the same IPv4 AH+ESN+forced-async-hmac(sha1) UML repro shows
> the corrected offset (ah4 output_done: esn=1 err=0 icv_off=24
> expected_off=24) and ping succeeds; net/ipv4/ah4.o and net/ipv6/ah6.o
> build clean at W=1. IPv6 AH+ESN was not exercised at runtime, and the
> change has not been tested against a real async hardware AH engine.
>
> Fixes: d4d573d0334d ("{IPv4,xfrm} Add ESN support for AH egress part")
> Fixes: d8b2a8600b0e ("{IPv4,xfrm} Add ESN support for AH ingress part")
> Fixes: 26dd70c3fad3 ("{IPv6,xfrm} Add ESN support for AH egress part")
> Fixes: 8d6da6f32557 ("{IPv6,xfrm} Add ESN support for AH ingress part")
> Cc: stable@vger.kernel.org
> Assisted-by: Codex:gpt-5-4
> Assisted-by: Claude:claude-opus-4-7
> Signed-off-by: Michael Bommarito <michael.bommarito@gmail.com>
Applied to the ipsec tree, thanks a lot Michael!
prev parent reply other threads:[~2026-04-21 13:31 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-04-19 22:35 [PATCH] xfrm: ah: account for ESN high bits in async callbacks Michael Bommarito
2026-04-21 13:31 ` 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=aed8Lsf0DSAPX1E9@secunet.com \
--to=steffen.klassert@secunet.com \
--cc=davem@davemloft.net \
--cc=dsahern@kernel.org \
--cc=edumazet@google.com \
--cc=fan.du@windriver.com \
--cc=herbert@gondor.apana.org.au \
--cc=horms@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=michael.bommarito@gmail.com \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox