WARNING in xfrm_output_resume

Status: upstream: reported C repro on 2026/11/14 00:23
Subsystems: net
Labels: prio:high
[Documentation on labels]
Reported-by: syzbot+622de7e1f18a30fc404a@syzkaller.appspotmail.com
First crash: 4d01h, last: 1h12m
Cause bisection: failed (error log, bisect log)
  
✨ AI-generated root cause summary:

IP-TFS (net/xfrm/xfrm_iptfs.c) registers iptfs_output_collect() as the dst->output handler for XFRM IPTFS mode to aggregate outgoing packets onto xtfs->queue for delayed transmission via an hrtimer (iptfs_delay_timer()). Packets delivered to dst->output can carry an unrefcounted, RCU-protected destination entry (SKB_DST_NOREF). Because iptfs_output_collect() does not force a refcount on the dst entry with skb_dst_force() before enqueuing, the SKBs retain an unpinned dst pointer after the caller's RCU read-side critical section completes. When iptfs_delay_timer() subsequently dequeues and transmits the packet via xfrm_output() in softirq context without rcu_read_lock(), xfrm_output_one() invokes skb_dst_force(), triggering WARN_ON(!rcu_read_lock_held()) and risking a use-after-free if the dst_entry was freed during the queuing delay.

▶ ▼ ✨ Full AI root cause analysis
Based on kernel commit 0fb18ce8a2e9:

Root Cause Analysis

Involved Components

  • Source File: net/xfrm/xfrm_iptfs.c (called into net/xfrm/xfrm_output.c and include/net/dst.h)
  • Functions: iptfs_output_collect(), iptfs_enqueue(), iptfs_delay_timer(), iptfs_output_queued(), xfrm_output_one(), skb_dst_force()
  • Data Structures / Fields: struct sk_buff::_skb_refdst, struct dst_entry, struct xfrm_iptfs_data::queue, struct xfrm_iptfs_data::iptfs_timer, SKB_DST_NOREF

Technical Mechanism

  1. IP-TFS Ingress and Output Collection: In IPsec IP-TFS (AggFrag / IP Tunnel Framing, RFC 9347), iptfs_output_collect() is assigned as the dst->output callback for the XFRM bundle (dst1->output = xfrm[i]->mode_cbs->output; in net/xfrm/xfrm_policy.c). Outgoing packets routed through the IP-TFS state enter iptfs_output_collect() synchronously from the local network stack under an active RCU read-side critical section (e.g., via dst_output() in ip_output() or ip6_output()).

  2. Unrefcounted Destination Entries (SKB_DST_NOREF): Packets arriving at dst->output may carry an unrefcounted destination entry where skb->_skb_refdst has the SKB_DST_NOREF bit set. Under Linux networking invariants, as long as skb->_skb_refdst has SKB_DST_NOREF, the pointed-to struct dst_entry is only guaranteed to remain valid for the duration of the current RCU read-side critical section. Whenever an SKB escapes an RCU-protected regionβ€”such as when stored on an internal queue across asynchronous boundaries or timersβ€”the subsystem must invoke skb_dst_force(skb) while still inside the RCU read-side critical section to safely convert the noref pointer into a true reference (dst_hold_safe(dst)).

  3. Missing skb_dst_force() in iptfs_output_collect(): In iptfs_output_collect(), after breaking apart GSO packets, the code loops over the segments and directly enqueues them via iptfs_enqueue():

    /* Enqueue to send in tunnel */
    ok = iptfs_enqueue(xtfs, skb);
    

    Neither iptfs_output_collect() nor iptfs_enqueue() calls skb_dst_force(skb). The function then arms the aggregation delay hrtimer xtfs->iptfs_timer and returns 0 to the caller. At this point, the transmitting thread exits its RCU read-side critical section, leaving the queued SKBs in xtfs->queue referencing unpinned dst_entry structures.

  4. Deferred Execution and Warning Trigger: When xtfs->iptfs_timer expires, iptfs_delay_timer() executes in softirq context (hrtimer_run_softirq), where rcu_read_lock() is not held. It dequeues the packets and calls iptfs_output_queued() -> xfrm_output(NULL, skb) -> xfrm_output_resume() -> xfrm_output_one().

    In net/xfrm/xfrm_output.c:549:

    skb_dst_force(skb);
    

    skb_dst_force() (defined in include/net/dst.h:321) checks:

    if (skb_dst_is_noref(skb)) {
        struct dst_entry *dst = skb_dst(skb);
    
        WARN_ON(!rcu_read_lock_held());
        if (!dst_hold_safe(dst))
            dst = NULL;
        ...
    }
    

    Because skb->_skb_refdst still carries SKB_DST_NOREF, execution reaches line 326. Since softirq execution does not hold rcu_read_lock(), !rcu_read_lock_held() evaluates to true and fires the warning splat. Furthermore, if an RCU grace period has elapsed while the packet was queued in xtfs->queue (for example, due to a route change, netdevice down, or policy deletion), the destination entry may already have been freed, causing dst_hold_safe() to touch freed memory.

▶ ▼ ✨ AI Jobs (1)
ID Workflow Result Correct Bug Created Started Finished Revision
e512239d assessment-security DenialOfService: βœ… Exploitable: βœ… FilesystemTrigger: ❌ FuzzingArtifact: ❌ MemoryCorruption: βœ… NetworkNeedsSetup: βœ… NetworkTrigger: βœ… PeripheralTrigger: ❌ RemoteTrigger: ❌ Unprivileged: ❌ UserNamespace: βœ… VMGuestTrigger: ❌ VMHostTrigger: ❌ ❓ WARNING in xfrm_output_resume 2026/11/09 23:28 2026/11/09 23:28 2026/11/10 00:04 5cecaf1f
▶ ▼ Discussions (1)
Title Replies (including bot) Last reply
[syzbot] [net?] WARNING in xfrm_output_resume 0 (1) 2026/11/14 00:22

Sample crash report:
------------[ cut here ]------------
!rcu_read_lock_held()
WARNING: ./include/net/dst.h:326 at skb_dst_force include/net/dst.h:326 [inline], CPU#1: ksoftirqd/1/24
WARNING: ./include/net/dst.h:326 at xfrm_output_one net/xfrm/xfrm_output.c:549 [inline], CPU#1: ksoftirqd/1/24
WARNING: ./include/net/dst.h:326 at xfrm_output_resume+0x41d9/0x64e0 net/xfrm/xfrm_output.c:597, CPU#1: ksoftirqd/1/24
Modules linked in:
CPU: 1 UID: 0 PID: 24 Comm: ksoftirqd/1 Not tainted syzkaller #0 PREEMPT(full) 
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/06/2026
RIP: 0010:skb_dst_force include/net/dst.h:326 [inline]
RIP: 0010:xfrm_output_one net/xfrm/xfrm_output.c:549 [inline]
RIP: 0010:xfrm_output_resume+0x41d9/0x64e0 net/xfrm/xfrm_output.c:597
Code: be b4 01 00 00 48 c7 c2 20 fd 53 8d e8 f0 05 07 f7 e9 aa fc ff ff e8 96 b1 2b f7 90 0f 0b 90 e9 7e ed ff ff e8 88 b1 2b f7 90 <0f> 0b 90 e9 44 e0 ff ff 48 89 df e8 c7 3c 52 fa 84 c0 0f 84 e1 00
RSP: 0018:ffffc900001e7660 EFLAGS: 00010246
RAX: ffffffff8a9d6fa8 RBX: 0000000000000000 RCX: ffff88801f2f5dc0
RDX: 8000000000000100 RSI: 0000000000000100 RDI: 0000000000000000
RBP: ffffc900001e78f0 R08: 0000000000000100 R09: 1ffffffff237c017
R10: dffffc0000000000 R11: fffffbfff237c018 R12: dffffc0000000000
R13: ffff8880243df198 R14: ffff888021b2b210 R15: ffff888028e9a780
FS:  0000000000000000(0000) GS:ffff888123509000(0000) knlGS:0000000000000000
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 00007f781b792e9c CR3: 000000007dcea000 CR4: 00000000003526f0
Call Trace:
 <TASK>
 iptfs_output_queued net/xfrm/xfrm_iptfs.c:2325 [inline]
 iptfs_delay_timer+0x3803/0x4310 net/xfrm/xfrm_iptfs.c:2362
 __run_hrtimer kernel/time/hrtimer.c:2079 [inline]
 __hrtimer_run_queues+0x3bc/0xa10 kernel/time/hrtimer.c:2136
 hrtimer_run_softirq+0x1e3/0x2e0 kernel/time/hrtimer.c:2153
 handle_softirqs+0x265/0x8d0 kernel/softirq.c:669
 run_ksoftirqd+0x36/0x60 kernel/softirq.c:1133
 smpboot_thread_fn+0x5f8/0xb30 kernel/smpboot.c:162
 kthread+0x38b/0x480 kernel/kthread.c:436
 ret_from_fork+0x514/0xb70 arch/x86/kernel/process.c:158
 ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245
 </TASK>

Crashes (130):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2026/11/10 05:51 upstream 7475ea8b5861 70ec0380 .config strace log report syz / log C [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce WARNING in xfrm_output_resume
2026/11/13 06:17 upstream 7e1392a42ea2 26b2fee0 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-badwrites-root WARNING in xfrm_output_resume
2026/11/13 03:34 upstream 7e1392a42ea2 26b2fee0 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce WARNING in xfrm_output_resume
2026/11/12 16:07 upstream 9d66f26fefac d6166547 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-badwrites-root WARNING in xfrm_output_resume
2026/11/11 14:46 upstream 067c5c24cef2 d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce WARNING in xfrm_output_resume
2026/11/11 05:28 upstream 067c5c24cef2 d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-badwrites-root WARNING in xfrm_output_resume
2026/11/10 03:39 upstream b3dfbde62cf1 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-selinux-root WARNING in xfrm_output_resume
2026/11/12 11:14 upstream 9d66f26fefac 5c462c66 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream WARNING in xfrm_output_resume
2026/11/11 10:24 upstream 067c5c24cef2 e56a968c .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream WARNING in xfrm_output_resume
2026/11/10 18:17 upstream b3dfbde62cf1 d3056657 .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream WARNING in xfrm_output_resume
2026/11/13 23:45 net ead6fa9a0ab1 be5d1971 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 22:34 net ead6fa9a0ab1 be5d1971 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 18:23 net ead6fa9a0ab1 be5d1971 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 17:06 net ead6fa9a0ab1 be5d1971 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 15:32 net ead6fa9a0ab1 be5d1971 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 14:59 net ead6fa9a0ab1 be5d1971 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 13:59 net ead6fa9a0ab1 be5d1971 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 10:22 net dee3429e94d8 26b2fee0 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 09:17 net dee3429e94d8 26b2fee0 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 07:56 net dee3429e94d8 26b2fee0 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 04:48 net dee3429e94d8 26b2fee0 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 01:49 net dee3429e94d8 26b2fee0 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/13 00:49 net dee3429e94d8 26b2fee0 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 23:13 net 145480b28ca8 d6166547 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 21:44 net 145480b28ca8 d6166547 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 18:23 net 145480b28ca8 d6166547 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 17:12 net 145480b28ca8 d6166547 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 13:47 net 145480b28ca8 d6166547 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 12:37 net 145480b28ca8 d6166547 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 10:01 net 145480b28ca8 d6166547 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 02:59 net 8d5ce4751fad 8d68b303 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 01:37 net 8d5ce4751fad 8d68b303 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/11 22:08 net 8d5ce4751fad 8d68b303 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/11 21:03 net 8d5ce4751fad 8d68b303 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/11 19:55 net 8d5ce4751fad 8d68b303 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/11 17:01 net 22b7cb932c6a d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/11 12:19 net 22b7cb932c6a d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/11 09:06 net af6f95c3300e d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/11 07:49 net af6f95c3300e d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/11 03:25 net af6f95c3300e d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/11 01:52 net af6f95c3300e d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/10 22:10 net af6f95c3300e d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/10 20:17 net af6f95c3300e d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/10 15:53 net af6f95c3300e 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/10 14:16 net af6f95c3300e 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/10 14:16 net af6f95c3300e 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/10 14:08 net af6f95c3300e 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/10 14:06 net af6f95c3300e 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-this-kasan-gce WARNING in xfrm_output_resume
2026/11/12 08:55 net-next c88fd6989aea d6166547 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-kasan-gce WARNING in xfrm_output_resume
2026/11/11 06:49 net-next 6db9448a443a d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-kasan-gce WARNING in xfrm_output_resume
2026/11/11 04:32 net-next 6db9448a443a d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-kasan-gce WARNING in xfrm_output_resume
2026/11/10 23:21 net-next 6db9448a443a d3056657 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-net-kasan-gce WARNING in xfrm_output_resume
2026/11/09 23:29 bpf-next 0fb18ce8a2e9 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-bpf-next-kasan-gce WARNING in xfrm_output_resume
2026/11/09 23:28 bpf-next 0fb18ce8a2e9 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-bpf-next-kasan-gce WARNING in xfrm_output_resume
2026/11/10 05:22 linux-next 630059a5a632 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-linux-next-kasan-gce-root WARNING in xfrm_output_resume
2026/11/10 01:30 linux-next 630059a5a632 70ec0380 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-rust-kasan-gce WARNING in xfrm_output_resume
* Struck through repros no longer work on HEAD.