From: Sabrina Dubroca <sd@queasysnail.net>
To: "Jérémy Jean" <jeremy.jean@oss.cyber.gouv.fr>
Cc: Steffen Klassert <steffen.klassert@secunet.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
"David S . Miller" <davem@davemloft.net>,
Saeed Mahameed <saeedm@nvidia.com>,
Leon Romanovsky <leon@kernel.org>,
Tariq Toukan <tariqt@nvidia.com>, Mark Bloch <mbloch@nvidia.com>,
Boris Pismenny <borisp@nvidia.com>,
netdev@vger.kernel.org, stable@vger.kernel.org
Subject: Re: [PATCH ipsec 4/7] xfrm: prevent AES-GCM nonce reuse after early GSO
Date: Wed, 14 Oct 2026 16:10:44 +0200 [thread overview]
Message-ID: <as-NZDzUz6Cf1_l5@krikkit> (raw)
In-Reply-To: <c24271382cde79f3b043908ae52c41cf@oss.cyber.gouv.fr>
Hi Jérémy, sorry for the delay.
2026-10-01, 23:07:55 +0200, Jérémy Jean wrote:
> On 2026-10-01 15:31, Sabrina Dubroca wrote:
> > 2026-09-30, 14:45:21 +0000, Jérémy Jean wrote:
> > > In the software ESP offload path, xfrm_output_gso() leaves its
> > > segments
> > > sharing a secpath extension. Each segment gets its own ESP sequence
> > > number, but stores it in the same xo->seq field for IV generation.
> > >
> > > If encryption is delayed, later segments overwrite the value needed by
> > > earlier ones: esp*_xmit() can then encrypt several packets with the
> > > same
> > > AES-GCM nonce, despite their distinct ESP sequence numbers.
> >
> > Here again, your commit message could describe much more precisely
> > what actually happens.
> >
> > I'm guessing you mean something that starts like
> >
> > xfrm_output_gso
> > segs = skb0,skb1... all with the same xo
> > ...
> > xfrm_output_one(skb0)
> > xfrm_replay_overflow(skb0) xo->seq = N
> > xfrm_output_one(skb1)
> > xfrm_replay_overflow(skb1) xo->seq = N+1
> > ...
> >
> > [and then some more stuff happens that gives them the right
> > esph->seq_no but wrong 64b seqno used for the IV]
> >
> > But please help reviewers trace the codepath you've already gone down,
> > without having to guess what you mean. You don't need to give the full
> > call graph with the state of each variable, but there needs to be more
> > than just the very beginning and the very end.
>
> Here is a more verbose changelog I wrote for that patch:
>
> ---
> With software ESP offload, xfrm_output() attaches a secpath before
> calling xfrm_output_gso() for an encapsulated GSO packet, but
> skb_gso_segment() leaves the splitted skbs sharing the same secpath,
> including xo->seq.
>
> For the i-th splitted segment, xfrm_output_gso() reaches
> xfrm_replay_overflow() through xfrm_output_one(), which allocates
> sequence number N+i to that segment, and then incorrectly overwrites
> the shared xo->seq with N+i. If encryption is delayed until all t
> segments have been processed, xo->seq ends up with value N+t-1 for all
> segments. When validate_xmit_xfrm() calls esp*_xmit() for each
> segment, the IV is constructed from the same value N+t-1, causing
> nonce reuse in AES-GCM. Yet, each ESP header correctly keeps using
> value N+i from its private XFRM_SKB_CB.
>
> Call secpath_set() for each offloaded segment before xfrm_output2(),
> so sequence allocation writes to private metadata that cannot be
> overwritten by later segments.
> ---
Thanks, this is much more helpful.
The comment in the diff could be dropped (git blame will guide the
reader to the commit message), or extended with "and stores it in the
secpath".
--
Sabrina
next prev parent reply other threads:[~2026-10-14 14:10 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-30 14:45 [PATCH ipsec 0/7] xfrm: fix ESP IV generation and ESN authentication Jérémy Jean
2026-09-30 14:45 ` [PATCH ipsec 1/7] xfrm: esp6: use the current sequence number for the IV Jérémy Jean
2026-09-30 14:45 ` [PATCH ipsec 2/7] xfrm: esp4: " Jérémy Jean
2026-09-30 14:45 ` [PATCH ipsec 3/7] xfrm: esp: use the current sequence number for AAD and offload Jérémy Jean
2026-09-30 14:45 ` [PATCH ipsec 4/7] xfrm: prevent AES-GCM nonce reuse after early GSO Jérémy Jean
2026-10-01 13:31 ` Sabrina Dubroca
2026-10-01 21:07 ` Jérémy Jean
2026-10-14 14:10 ` Sabrina Dubroca [this message]
2026-09-30 14:45 ` [PATCH ipsec 5/7] net/mlx5e: Use the packet sequence number for the IPsec IV Jérémy Jean
2026-10-01 11:42 ` Sabrina Dubroca
2026-10-01 19:33 ` Jérémy Jean
2026-10-05 13:06 ` Tariq Toukan
2026-10-05 13:50 ` Jérémy Jean
2026-10-05 18:28 ` Jérémy Jean
2026-10-06 6:49 ` Tariq Toukan
2026-10-06 8:51 ` Jérémy Jean
2026-09-30 14:45 ` [PATCH ipsec 6/7] xfrm: segment untrusted GSO packets before sequence allocation Jérémy Jean
2026-09-30 14:45 ` [PATCH ipsec 7/7] xfrm: leave the sequence counter unchanged on ESN overflow Jérémy Jean
2026-10-01 11:24 ` Sabrina Dubroca
2026-10-01 11:37 ` Jérémy Jean
2026-10-01 11:45 ` Sabrina Dubroca
2026-10-01 11:48 ` Jérémy Jean
2026-09-30 14:48 ` [PATCH ipsec 0/7] xfrm: fix ESP IV generation and ESN authentication netdev-bot+sinfo
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=as-NZDzUz6Cf1_l5@krikkit \
--to=sd@queasysnail.net \
--cc=borisp@nvidia.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=jeremy.jean@oss.cyber.gouv.fr \
--cc=leon@kernel.org \
--cc=mbloch@nvidia.com \
--cc=netdev@vger.kernel.org \
--cc=saeedm@nvidia.com \
--cc=stable@vger.kernel.org \
--cc=steffen.klassert@secunet.com \
--cc=tariqt@nvidia.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox