Re: [PATCH net v2] xfrm: hold net_device reference under RCU in bundle creation
From: Steffen Klassert
Date: Thu Sep 03 2026 - 03:55:03 EST
On Wed, Aug 26, 2026 at 04:17:45PM -0400, Cen Zhang (Microsoft) wrote:
> From: "Cen Zhang (Microsoft Security FORGE Labs)" <blbllhy@xxxxxxxxx>
>
> xfrm_bundle_create() and xfrm_create_dummy_bundle() read dst->dev into
> a local pointer without taking a device reference, then pass it to
> xfrm_fill_dst(). A concurrent RTM_DELLINK replaces dst->dev via
> dst_dev_put() and frees the old net_device, causing a use-after-free
> when xfrm6_fill_dst() later dereferences the stale dev pointer.
>
> BUG: KASAN: slab-use-after-free in xfrm6_fill_dst+0x82c/0x860
> (net/ipv6/xfrm6_policy.c:86 netdev_hold())
> Read of size 8 at addr ffff8880142fe588 by task exploit/153
> Call Trace:
> xfrm6_fill_dst+0x82c/0x860
> xfrm_resolve_and_create_bundle+0x21d4/0x2bd0
> xfrm_lookup_with_ifid+0x485/0x1640
> ip6_dst_lookup_flow+0x19b/0x1e0
> udpv6_sendmsg+0x1443/0x2dd0
>
> Fix this by reading dst->dev via dst_dev_rcu() and keeping the RCU
> read-side critical section active until xfrm_fill_dst() has taken the
> required device references.
>
> Fixes: 25ee3286dcbc ("[IPSEC]: Merge common code into xfrm_bundle_create")
> Fixes: a0073fe18e71 ("xfrm: Add a state resolution packet queue")
> Suggested-by: Steffen Klassert <steffen.klassert@xxxxxxxxxxx>
> Reported-by: Xiang Mei (Microsoft) <xmei5@xxxxxxx>
> Link: https://lore.kernel.org/all/20260820200245.44312-1-blbllhy@xxxxxxxxx/
> Cc: AutonomousCodeSecurity@xxxxxxxxxxxxx
> Assisted-by: GitHub-Copilot:claude-opus-4.6
> Signed-off-by: Cen Zhang (Microsoft Security FORGE Labs) <blbllhy@xxxxxxxxx>
Applied, thanks a lot!