BUG: workqueue lockup in batadv_tt_purge

Status: moderation: reported on 2026/09/14 09:46
Subsystems: netfilter
Labels: prio:high
[Documentation on labels]
Reported-by: syzbot+647fe9d2888ca12b315d@syzkaller.appspotmail.com
First crash: 4d01h, last: 1d06h
✨ AI Jobs (2)
ID Workflow Result Correct Bug Created Started Finished Revision
5776a160 repro-c 🏃 BUG: workqueue lockup in batadv_tt_purge 2026/09/14 09:59 2026/09/14 09:59 70a60e12
d15d28ef assessment-security DenialOfService: ✅ Exploitable: ❌ FilesystemTrigger: ❌ NetworkTrigger: ✅ PeripheralTrigger: ❌ RemoteTrigger: ❌ Unprivileged: ❌ UserNamespace: ✅ VMGuestTrigger: ❌ VMHostTrigger: ❌ BUG: workqueue lockup in batadv_tt_purge 2026/09/12 00:51 2026/09/12 00:51 2026/09/12 00:57 6816f32e

Sample crash report:
BUG: workqueue lockup - pool cpus=1 node=0 flags=0x0 nice=0 stuck for 54s!
Showing busy workqueues and worker pools:
workqueue events: flags=0x100
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=12 refcnt=13
    in-flight: 4805:free_ipc for 1s
    pending: drm_fb_helper_damage_work, 5*nsim_dev_hwstats_traffic_work, 4*ovs_dp_masks_rebalance, psi_avgs_work
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=16 refcnt=17
    pending: 5*nsim_dev_hwstats_traffic_work, 2*psi_avgs_work, 3*ovs_dp_masks_rebalance, xfrm_state_gc_task, psi_avgs_work, delayed_vfree_work, mptcp_worker, 2*psi_avgs_work
workqueue events_unbound: flags=0x2
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=12 refcnt=13
    in-flight: 40:nsim_dev_trap_report_work for 3s
    pending: 3*nsim_dev_trap_report_work, toggle_allocation_gate, 4*nsim_dev_trap_report_work, flush_memcg_stats_dwork, 2*nsim_dev_trap_report_work
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=13 refcnt=14
    in-flight: 12:cfg80211_wiphy_work for 68s cfg80211_wiphy_work ,3262:cfg80211_wiphy_work for 68s cfg80211_wiphy_work ,14:cfg80211_wiphy_work for 68s cfg80211_wiphy_work ,1191:cfg80211_wiphy_work for 57s cfg80211_wiphy_work ,3150:cfg80211_wiphy_work for 47s cfg80211_wiphy_work ,6624:cfg80211_wiphy_work for 67s cfg80211_wiphy_work
    pending: macvlan_process_broadcast
workqueue events_power_efficient: flags=0x82
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=4 refcnt=5
    pending: gc_worker, neigh_periodic_work, fb_flashcursor, nf_flow_offload_work_gc
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=4 refcnt=5
    in-flight: 266:reg_check_chans_work for 10s
    pending: wg_ratelimiter_gc_entries, 2*neigh_managed_work
workqueue events_dfl_long: flags=0x2
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=5 refcnt=6
    in-flight: 58:defense_work_handler for 1s
    pending: 4*defense_work_handler
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=2 refcnt=3
    pending: 2*defense_work_handler
workqueue mm_percpu_wq: flags=0x108
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: vmstat_update
workqueue bat_events: flags=0x6000a
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=53 MAYDAY
    in-flight: 2852(RESCUER):batadv_tt_purge for 10s
    inactive: batadv_tt_purge, batadv_bla_periodic_work, batadv_dat_purge, 2*batadv_tt_purge, batadv_bla_periodic_work, 2*batadv_dat_purge, 2*batadv_bla_periodic_work, batadv_dat_purge, 2*batadv_iv_send_outstanding_bat_ogm_packet, batadv_dat_purge, 2*batadv_bla_periodic_work, batadv_dat_purge, batadv_mcast_mla_update, 5*batadv_iv_send_outstanding_bat_ogm_packet, 2*batadv_purge_orig, batadv_iv_send_outstanding_bat_ogm_packet, 3*batadv_purge_orig, 5*batadv_iv_send_outstanding_bat_ogm_packet, 5*batadv_mcast_mla_update, 5*batadv_iv_send_outstanding_bat_ogm_packet, batadv_purge_orig, 2*batadv_tt_purge
workqueue wg-kex-wg0: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_encrypt_worker, wg_packet_tx_worker, wg_packet_decrypt_worker
workqueue wg-kex-wg2: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue krds_cp_wq#0/0: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    in-flight: 54:rds_connect_worker for 30s
workqueue krds_cp_wq#1/0: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue krds_cp_wq#1/4: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue krds_cp_wq#1/5: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue krds_cp_wq#1/6: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue krds_cp_wq#2/0: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue krds_cp_wq#2/1: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue krds_cp_wq#2/2: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue krds_cp_wq#2/4: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue krds_cp_wq#2/5: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue krds_cp_wq#2/6: flags=0x20002
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=4
    pending: rds_send_worker
workqueue wg-kex-wg0: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-kex-wg0: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg1: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_decrypt_worker, wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-kex-wg1: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    in-flight: 9685:wg_packet_handshake_send_worker for 4s
workqueue wg-crypt-wg1: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg0: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-kex-wg0: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_send_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=2
    in-flight: 866:wg_packet_encrypt_worker for 1s
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-kex-wg1: flags=0x6
  pwq 8: cpus=0-1 flags=0x6 nice=0 active=1 refcnt=2
    in-flight: 1393:wg_packet_handshake_send_worker for 1s
workqueue wg-crypt-wg1: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 2: cpus=0 node=0 flags=0x2 nice=0 active=1 refcnt=2
    pending: wg_packet_encrypt_worker
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg0: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_encrypt_worker, wg_packet_tx_worker, wg_packet_decrypt_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_encrypt_worker, wg_packet_tx_worker, wg_packet_decrypt_worker
workqueue wg-crypt-wg0: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=2 refcnt=3
    pending: wg_packet_tx_worker, wg_packet_encrypt_worker
workqueue wg-crypt-wg1: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_decrypt_worker, wg_packet_encrypt_worker, wg_packet_tx_worker
workqueue wg-kex-wg2: flags=0x124
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=1 refcnt=2
    pending: wg_packet_handshake_receive_worker
workqueue wg-crypt-wg2: flags=0x128
  pwq 6: cpus=1 node=0 flags=0x0 nice=0 active=3 refcnt=4
    pending: wg_packet_encrypt_worker, wg_packet_decrypt_worker, wg_packet_tx_worker
pool 2: cpus=0 node=0 flags=0x2 nice=0 hung=1s workers=9 manager: 4804 idle: 10 9 4812 4792 4842 1160
pool 8: cpus=0-1 flags=0x6 nice=0 hung=1s workers=13 manager: 9686
Showing backtraces of busy workers in stalled worker pools:
pool 6: no worker in running state, cpu=1 is busy (nr_workers=9 nr_idle=9)
The pool might have trouble waking an idle worker.
Backtrace of last woken worker:
task:kworker/1:0     state:R  running task     stack:0     pid:24    tgid:24    ppid:2      task_flags:0x4208060 flags:0x00000010
Workqueue:  0x0 (wg-crypt-wg1)
Call trace:
 __switch_to+0x2b4/0x6e4 arch/arm64/kernel/process.c:775 (T)
 context_switch kernel/sched/core.c:5520 [inline]
 __schedule+0x1370/0x2d80 kernel/sched/core.c:7270
 __schedule_loop kernel/sched/core.c:7347 [inline]
 schedule+0x13c/0x20c kernel/sched/core.c:7362
 worker_thread+0x924/0xbd0 kernel/workqueue.c:3566
 kthread+0x304/0x3d4 kernel/kthread.c:436
 ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:838
Sending NMI from CPU 0 to CPUs 1:
NMI backtrace for cpu 1
CPU: 1 UID: 0 PID: 2852 Comm: kworker/R-bat_e Tainted: G             L      syzkaller #0 PREEMPT 
Tainted: [L]=SOFTLOCKUP
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 08/14/2026
Workqueue: bat_events batadv_tt_purge
pstate: 83400005 (Nzcv daif +PAN -UAO +TCO +DIT -SSBS BTYPE=--)
pc : should_resched arch/arm64/include/asm/preempt.h:98 [inline]
pc : __local_bh_enable_ip+0x1f0/0x35c kernel/softirq.c:480
lr : __local_bh_enable_ip+0x1ec/0x35c kernel/softirq.c:478
sp : ffff80008ec46c70
x29: ffff80008ec46c80 x28: ffff80008ec46ce0 x27: dfff800000000000
x26: ffff700011d88d9c x25: ffff0000f72d7c00 x24: 0000000000000001
x23: dfff800000000000 x22: 1fffe00019a29001 x21: ffff80008581533c
x20: 0000000000000200 x19: ffff0000cd148008 x18: 000000008b2d01d6
x17: 0000000064e08853 x16: dfff800000000000 x15: 000000000a1c25aa
x14: 00000000803107d8 x13: 0000000000000002 x12: 0000000000000003
x11: ffff80008a6a6e28 x10: 0000000000000003 x9 : 0000000000000000
x8 : 0000000003cf281e x7 : 0000000000000000 x6 : 0000000000000003
x5 : 0000000000000000 x4 : 0000000000000008 x3 : ffff8000801561b4
x2 : 0000000000000002 x1 : ffff0000cd148000 x0 : ffff80012517a000
Call trace:
 __daif_local_irq_enable arch/arm64/include/asm/irqflags.h:26 [inline] (P)
 arch_local_irq_enable arch/arm64/include/asm/irqflags.h:48 [inline] (P)
 __local_bh_enable_ip+0x1f0/0x35c kernel/softirq.c:478 (P)
 local_bh_enable include/linux/bottom_half.h:33 [inline]
 ip6_pol_route+0xb38/0xf50 net/ipv6/route.c:2332
 ip6_pol_route_output+0x60/0x94 net/ipv6/route.c:2677
 pol_lookup_func include/net/ip6_fib.h:670 [inline]
 fib6_rule_lookup+0x19c/0x478 net/ipv6/fib6_rules.c:123
 ip6_route_output_flags_noref net/ipv6/route.c:2710 [inline]
 ip6_route_output_flags+0x300/0x58c net/ipv6/route.c:2722
 ip6_route_output include/net/ip6_route.h:100 [inline]
 __nf_ip6_route+0x54/0xe4 net/ipv6/netfilter.c:102
 nf_ip6_route include/linux/netfilter_ipv6.h:57 [inline]
 synproxy_send_tcp_ipv6+0x1ec/0x5b4 net/netfilter/nf_synproxy_core.c:845
 synproxy_send_client_synack_ipv6+0x384/0x5dc net/netfilter/nf_synproxy_core.c:907
 nft_synproxy_eval_v6+0x16c/0x278 net/netfilter/nft_synproxy.c:90
 nft_synproxy_do_eval+0x350/0x4a4 net/netfilter/nft_synproxy.c:145
 nft_synproxy_eval+0x34/0x48 net/netfilter/nft_synproxy.c:247
 expr_call_ops_eval net/netfilter/nf_tables_core.c:237 [inline]
 nft_do_chain+0x418/0x13c8 net/netfilter/nf_tables_core.c:285
 nft_do_chain_inet+0x284/0x3d4 net/netfilter/nft_chain_filter.c:162
 nf_hook_entry_hookfn include/linux/netfilter.h:165 [inline]
 nf_hook_slow+0xc8/0x224 net/netfilter/core.c:619
 nf_hook include/linux/netfilter.h:280 [inline]
 NF_HOOK+0x1f0/0x398 include/linux/netfilter.h:323
 ip6_input+0x17c/0x29c net/ipv6/ip6_input.c:545
 dst_input include/net/dst.h:480 [inline]
 ip6_rcv_finish+0x1e0/0x204 net/ipv6/ip6_input.c:119
 NF_HOOK+0x308/0x398 include/linux/netfilter.h:325
 ipv6_rcv+0x9c/0xbc net/ipv6/ip6_input.c:351
 __netif_receive_skb_one_core+0xc8/0x110 net/core/dev.c:6264
 __netif_receive_skb+0x34/0x128 net/core/dev.c:6377
 process_backlog+0x5f4/0x16f8 net/core/dev.c:6728
 __napi_poll+0xb4/0x328 net/core/dev.c:7787
 napi_poll net/core/dev.c:7850 [inline]
 net_rx_action+0x5b0/0xc14 net/core/dev.c:8007
 handle_softirqs+0x2ec/0xd98 kernel/softirq.c:645
 __do_softirq+0x14/0x20 kernel/softirq.c:679
 ____do_softirq+0x14/0x20 arch/arm64/kernel/irq.c:78
 call_on_irq_stack+0x30/0x48 arch/arm64/kernel/entry.S:885
 do_softirq_own_stack+0x20/0x2c arch/arm64/kernel/irq.c:83
 do_softirq+0x90/0xf8 kernel/softirq.c:546
 __local_bh_enable_ip+0x240/0x35c kernel/softirq.c:473
 __raw_spin_unlock_bh include/linux/spinlock_api_smp.h:237 [inline]
 _raw_spin_unlock_bh+0x3c/0x4c kernel/locking/spinlock.c:245
 spin_unlock_bh include/linux/spinlock.h:407 [inline]
 batadv_tt_local_purge+0x274/0x2f0 net/batman-adv/translation-table.c:1402
 batadv_tt_purge+0x44/0x7b4 net/batman-adv/translation-table.c:3753
 process_one_work kernel/workqueue.c:3387 [inline]
 process_scheduled_works+0x91c/0x1250 kernel/workqueue.c:3470
 rescuer_thread+0x68c/0xd90 kernel/workqueue.c:3694
 kthread+0x304/0x3d4 kernel/kthread.c:436
 ret_from_fork+0x10/0x20 arch/arm64/kernel/entry.S:838

Crashes (2):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2026/09/13 04:33 git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-kernelci 5445d6419962 70a60e12 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-gce-arm64 BUG: workqueue lockup in batadv_tt_purge
2026/09/10 09:39 git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux.git for-kernelci 5445d6419962 4e8b1cc6 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-gce-arm64 BUG: workqueue lockup in batadv_tt_purge
* Struck through repros no longer work on HEAD.