possible deadlock in cpuset_can_attach

Status: upstream: reported on 2026/11/05 11:33
Subsystems: cgroups
Labels: prio:low
[Documentation on labels]
Reported-by: syzbot+e0faf21748da6475085c@syzkaller.appspotmail.com
First crash: 1d19h, last: 1d19h
✨ AI-generated root cause summary:

A circular locking dependency exists between cgroup/cpuset synchronization and the CPU hotplug lock via memory reclaim and network socket operations. During cgroup task migration, cgroup_attach_lock() acquires cpu_hotplug_lock followed by cgroup_threadgroup_rwsem, after which cpuset_can_attach() acquires cpuset_mutex, establishing the order cpu_hotplug_lock -> cgroup_threadgroup_rwsem -> cpuset_mutex. In contrast, rebuild_sched_domains_cpuslocked() holds cpuset_mutex while calling generate_sched_domains(), which performs GFP_KERNEL allocations under cpuset_mutex and thereby depends on fs_reclaim; fs_reclaim in turn depends on block I/O (NBD), network sockets (sk_lock), and tunnel initialization in L2TP, where l2tp_tunnel_register() calls setup_udp_tunnel_sock() and acquires cpu_hotplug_lock via static_key_slow_inc(). This creates an inverted dependency chain from cpuset_mutex to cpu_hotplug_lock, triggering a lockdep warning and posing a risk of system deadlock.

▶ ▼ ✨ Full AI root cause analysis
Based on kernel commit 2637bdec0535:

Root Cause Analysis: Circular Locking Dependency in Cgroup / Cpuset Migration

1. Involved Functions, Structs, and Locks


2. Detailed Mechanism and Lock Inversion

Lockdep detected a circular locking dependency involving cgroup_threadgroup_rwsem, cpuset_mutex, and cpu_hotplug_lock. The circular chain is formed by two conflicting lock dependency paths:

Path A: Migration Path (cpu_hotplug_lock $\rightarrow$ cgroup_threadgroup_rwsem $\rightarrow$ cpuset_mutex)
  1. During task migration into a cgroup (e.g., writing to cgroup.procs), cgroup_procs_write_start() calls cgroup_attach_lock().
  2. To prevent CPU hotplug callbacks from racing with task migrations, cgroup_attach_lock() (kernel/cgroup/cgroup.c:2544) explicitly acquires cpus_read_lock() (cpu_hotplug_lock) and then write-locks cgroup_threadgroup_rwsem (percpu_down_write(&cgroup_threadgroup_rwsem)).
  3. Next, cgroup_migrate_execute() invokes subsystem can_attach callbacks. For the cpuset controller, cpuset_can_attach() (kernel/cgroup/cpuset.c:3226) acquires cpuset_mutex.
  4. This sequence establishes the lock ordering: $$\text{cpu_hotplug_lock} \rightarrow \text{cgroup_threadgroup_rwsem} \rightarrow \text{cpuset_mutex}$$
Path B: Sched Domain Rebuild & Memory Reclaim Path (cpuset_mutex $\rightarrow$ fs_reclaim $\rightarrow \dots \rightarrow$ cpu_hotplug_lock)
  1. In kernel/cgroup/cpuset.c, rebuild_sched_domains_cpuslocked() acquires cpuset_mutex and calls rebuild_sched_domains_locked().
  2. rebuild_sched_domains_locked() invokes generate_sched_domains(), which calls alloc_sched_domains().
  3. alloc_sched_domains() (kernel/sched/topology.c:3284) performs memory allocations using GFP_KERNEL (alloc_cpumask_var(&doms[i], GFP_KERNEL)).
  4. Allocating memory with GFP_KERNEL while holding cpuset_mutex establishes a dependency on direct memory reclaim: $$\text{cpuset_mutex} \rightarrow \text{fs_reclaim}$$
  5. Under direct memory reclaim, the kernel can reclaim dirty pages backed by network block devices (such as NBD), which pushes requests through the block layer (q->q_usage_counter $\rightarrow$ elevator_lock $\rightarrow$ set->srcu $\rightarrow$ cmd->lock $\rightarrow$ nsock->tx_lock).
  6. In drivers/block/nbd.c:319, nbd_mark_nsock_dead() calls kernel_sock_shutdown(), which invokes inet_shutdown() and acquires lock_sock(sk) (sk_lock-AF_INET6) while holding nsock->tx_lock.
  7. In network tunnel configuration (net/l2tp/l2tp_core.c:1690), l2tp_tunnel_register() is called with lock_sock(sk) held; it calls setup_udp_tunnel_sock(), which calls udp_tunnel_encap_enable() $\rightarrow$ static_key_slow_inc() $\rightarrow$ cpus_read_lock(), acquiring cpu_hotplug_lock. This completes the link: $$\text{sk_lock-AF_INET6} \rightarrow \text{cpu_hotplug_lock}$$

3. Summary of the Invariant Violation

The kernel requires that locks protecting memory allocation contexts must not nest outside operations that can acquire locks taken during fs_reclaim. Holding cpuset_mutex across GFP_KERNEL memory allocations in rebuild_sched_domains_locked() creates a dependency on fs_reclaim, which transitively depends on cpu_hotplug_lock. However, cgroup_attach_lock() acquires cpu_hotplug_lock as an outer lock before taking cgroup_threadgroup_rwsem and cpuset_mutex. When these two paths interact, lockdep detects the potential circular dependency, warning of an ABBA deadlock between cpuset_mutex and cpu_hotplug_lock.

▶ ▼ ✨ AI Jobs (1)
ID Workflow Result Correct Bug Created Started Finished Revision
3bf29d33 assessment-security DenialOfService: ✅ Exploitable: ❌ FilesystemTrigger: ❌ FuzzingArtifact: ❌ MemoryCorruption: ❌ NetworkNeedsSetup: ❌ NetworkTrigger: ❌ PeripheralTrigger: ❌ RemoteTrigger: ❌ Unprivileged: ❌ UserNamespace: ❌ VMGuestTrigger: ❌ VMHostTrigger: ❌ ❓ possible deadlock in cpuset_can_attach 2026/11/03 16:10 2026/11/03 16:10 2026/11/03 16:56 d02c3949
▶ ▼ Discussions (1)
Title Replies (including bot) Last reply
[syzbot] [cgroups?] possible deadlock in cpuset_can_attach 0 (1) 2026/11/05 11:33

Sample crash report:
======================================================
WARNING: possible circular locking dependency detected
syzkaller #0 Tainted: G S           L     
------------------------------------------------------
syz-executor/15837 is trying to acquire lock:
ffffffff901aad60 (cpuset_mutex){+.+.}-{4:4}, at: cpuset_can_attach+0xac/0x1170 kernel/cgroup/cpuset.c:3226

but task is already holding lock:
ffffffff9019add0 (cgroup_threadgroup_rwsem){++++}-{0:0}, at: cgroup_attach_lock kernel/cgroup/cgroup.c:2550 [inline]
ffffffff9019add0 (cgroup_threadgroup_rwsem){++++}-{0:0}, at: cgroup_procs_write_start+0x574/0x900 kernel/cgroup/cgroup.c:3182

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #9 (cgroup_threadgroup_rwsem){++++}-{0:0}:
       percpu_down_write+0x4f/0x330 kernel/locking/percpu-rwsem.c:232
       cgroup_attach_lock kernel/cgroup/cgroup.c:2550 [inline]
       cgroup_procs_write_start+0x574/0x900 kernel/cgroup/cgroup.c:3182
       __cgroup_procs_write+0xa4/0x2f0 kernel/cgroup/cgroup.c:5508
       cgroup_procs_write+0x27/0x50 kernel/cgroup/cgroup.c:5543
       cgroup_file_write+0x331/0x8f0 kernel/cgroup/cgroup.c:4426
       kernfs_fop_write_iter+0x3a4/0x540 fs/kernfs/file.c:345
       new_sync_write fs/read_write.c:595 [inline]
       vfs_write+0x612/0xba0 fs/read_write.c:687
       ksys_write+0x150/0x270 fs/read_write.c:1036
       do_syscall_x64 arch/x86/entry/syscall_64.c:61 [inline]
       do_syscall_64+0x166/0x520 arch/x86/entry/syscall_64.c:84
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #8 (cpu_hotplug_lock){++++}-{0:0}:
       percpu_down_read_internal include/linux/percpu-rwsem.h:53 [inline]
       percpu_down_read include/linux/percpu-rwsem.h:77 [inline]
       cpus_read_lock+0x3d/0x160 kernel/cpu.c:490
       static_key_slow_inc+0x12/0x30 kernel/jump_label.c:190
       udp_tunnel_encap_enable include/net/udp_tunnel.h:232 [inline]
       setup_udp_tunnel_sock+0x2df/0x4f0 net/ipv4/udp_tunnel_core.c:90
       l2tp_tunnel_register+0xe77/0x1570 net/l2tp/l2tp_core.c:1690
       pppol2tp_tunnel_get net/l2tp/l2tp_ppp.c:663 [inline]
       pppol2tp_connect+0x8e3/0x18b0 net/l2tp/l2tp_ppp.c:711
       connect_socket net/socket.c:2143 [inline]
       __sys_connect_file net/socket.c:2168 [inline]
       __sys_connect+0x316/0x450 net/socket.c:2185
       __do_sys_connect net/socket.c:2191 [inline]
       __se_sys_connect net/socket.c:2188 [inline]
       __x64_sys_connect+0x7a/0x90 net/socket.c:2188
       do_syscall_x64 arch/x86/entry/syscall_64.c:61 [inline]
       do_syscall_64+0x166/0x520 arch/x86/entry/syscall_64.c:84
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #7 (sk_lock-AF_INET6){+.+.}-{0:0}:
       lock_sock_nested+0x41/0x100 net/core/sock.c:3908
       lock_sock include/net/sock.h:1717 [inline]
       inet_shutdown+0x6a/0x390 net/ipv4/af_inet.c:911
       nbd_mark_nsock_dead+0x2cb/0x550 drivers/block/nbd.c:319
       sock_shutdown+0x15e/0x260 drivers/block/nbd.c:420
       nbd_clear_sock+0x24/0x170 drivers/block/nbd.c:1463
       nbd_config_put+0x477/0x7e0 drivers/block/nbd.c:1492
       nbd_genl_connect+0x19b8/0x1cd0 drivers/block/nbd.c:2319
       genl_family_rcv_msg_doit+0x233/0x340 net/netlink/genetlink.c:1114
       genl_family_rcv_msg net/netlink/genetlink.c:1194 [inline]
       genl_rcv_msg+0x614/0x7a0 net/netlink/genetlink.c:1209
       netlink_rcv_skb+0x226/0x4a0 net/netlink/af_netlink.c:2584
       genl_rcv+0x28/0x40 net/netlink/genetlink.c:1218
       netlink_unicast_kernel net/netlink/af_netlink.c:1335 [inline]
       netlink_unicast+0x8ef/0xa80 net/netlink/af_netlink.c:1361
       netlink_sendmsg+0x7f0/0xb20 net/netlink/af_netlink.c:1920
       sock_sendmsg_nosec+0x14e/0x190 net/socket.c:800
       __sock_sendmsg net/socket.c:818 [inline]
       ____sys_sendmsg+0x54e/0x850 net/socket.c:2715
       ___sys_sendmsg+0x2a6/0x360 net/socket.c:2769
       __sys_sendmsg net/socket.c:2801 [inline]
       __do_sys_sendmsg net/socket.c:2806 [inline]
       __se_sys_sendmsg net/socket.c:2804 [inline]
       __x64_sys_sendmsg+0x1b1/0x290 net/socket.c:2804
       do_syscall_x64 arch/x86/entry/syscall_64.c:61 [inline]
       do_syscall_64+0x166/0x520 arch/x86/entry/syscall_64.c:84
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #6 (&nsock->tx_lock){+.+.}-{4:4}:
       __mutex_lock_common kernel/locking/mutex.c:646 [inline]
       __mutex_lock+0x197/0x15a0 kernel/locking/mutex.c:821
       nbd_handle_cmd drivers/block/nbd.c:1143 [inline]
       nbd_queue_rq+0x373/0xff0 drivers/block/nbd.c:1207
       blk_mq_dispatch_rq_list+0x499/0x1990 block/blk-mq.c:2141
       __blk_mq_do_dispatch_sched block/blk-mq-sched.c:168 [inline]
       blk_mq_do_dispatch_sched block/blk-mq-sched.c:182 [inline]
       __blk_mq_sched_dispatch_requests+0xd36/0x1580 block/blk-mq-sched.c:307
       blk_mq_sched_dispatch_requests+0xd7/0x190 block/blk-mq-sched.c:329
       blk_mq_run_work_fn+0x167/0x2f0 block/blk-mq.c:2556
       process_one_work kernel/workqueue.c:3495 [inline]
       process_scheduled_works+0xc3d/0x1630 kernel/workqueue.c:3578
       worker_thread+0xa47/0xfb0 kernel/workqueue.c:3659
       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

-> #5 (&cmd->lock){+.+.}-{4:4}:
       __mutex_lock_common kernel/locking/mutex.c:646 [inline]
       __mutex_lock+0x197/0x15a0 kernel/locking/mutex.c:821
       nbd_queue_rq+0xc1/0xff0 drivers/block/nbd.c:1199
       blk_mq_dispatch_rq_list+0x499/0x1990 block/blk-mq.c:2141
       __blk_mq_do_dispatch_sched block/blk-mq-sched.c:168 [inline]
       blk_mq_do_dispatch_sched block/blk-mq-sched.c:182 [inline]
       __blk_mq_sched_dispatch_requests+0xd36/0x1580 block/blk-mq-sched.c:307
       blk_mq_sched_dispatch_requests+0xd7/0x190 block/blk-mq-sched.c:329
       blk_mq_run_work_fn+0x167/0x2f0 block/blk-mq.c:2556
       process_one_work kernel/workqueue.c:3495 [inline]
       process_scheduled_works+0xc3d/0x1630 kernel/workqueue.c:3578
       worker_thread+0xa47/0xfb0 kernel/workqueue.c:3659
       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

-> #4 (set->srcu){.+.+}-{0:0}:
       srcu_lock_sync include/linux/srcu.h:225 [inline]
       __synchronize_srcu+0xca/0x2f0 kernel/rcu/srcutree.c:1662
       elevator_switch+0x1e8/0x7b0 block/elevator.c:576
       elevator_change+0x2fa/0x480 block/elevator.c:681
       elevator_set_default+0x375/0x440 block/elevator.c:754
       blk_register_queue+0x404/0x4f0 block/blk-sysfs.c:992
       __add_disk+0x6b8/0xdb0 block/genhd.c:531
       add_disk_fwnode+0x100/0x3a0 block/genhd.c:600
       add_disk include/linux/blkdev.h:801 [inline]
       nbd_dev_add+0x733/0xb60 drivers/block/nbd.c:2026
       nbd_init+0x168/0x1f0 drivers/block/nbd.c:2743
       do_one_initcall+0x250/0x870 init/main.c:1419
       do_initcall_level+0x10a/0x1a0 init/main.c:1481
       do_initcalls+0x59/0xa0 init/main.c:1497
       kernel_init_freeable+0x29d/0x3e0 init/main.c:1732
       kernel_init+0x22/0x1d0 init/main.c:1622
       ret_from_fork+0x514/0xb70 arch/x86/kernel/process.c:158
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245

-> #3 (&q->elevator_lock){+.+.}-{4:4}:
       __mutex_lock_common kernel/locking/mutex.c:646 [inline]
       __mutex_lock+0x197/0x15a0 kernel/locking/mutex.c:821
       elevator_change+0x1af/0x480 block/elevator.c:679
       elevator_set_none+0xb5/0x140 block/elevator.c:769
       blk_mq_elv_switch_none block/blk-mq.c:5160 [inline]
       __blk_mq_update_nr_hw_queues block/blk-mq.c:5205 [inline]
       blk_mq_update_nr_hw_queues+0x60b/0x1b70 block/blk-mq.c:5273
       nbd_start_device+0x189/0xb30 drivers/block/nbd.c:1530
       nbd_genl_connect+0x167d/0x1cd0 drivers/block/nbd.c:2310
       genl_family_rcv_msg_doit+0x233/0x340 net/netlink/genetlink.c:1114
       genl_family_rcv_msg net/netlink/genetlink.c:1194 [inline]
       genl_rcv_msg+0x614/0x7a0 net/netlink/genetlink.c:1209
       netlink_rcv_skb+0x226/0x4a0 net/netlink/af_netlink.c:2584
       genl_rcv+0x28/0x40 net/netlink/genetlink.c:1218
       netlink_unicast_kernel net/netlink/af_netlink.c:1335 [inline]
       netlink_unicast+0x8ef/0xa80 net/netlink/af_netlink.c:1361
       netlink_sendmsg+0x7f0/0xb20 net/netlink/af_netlink.c:1920
       sock_sendmsg_nosec+0x14e/0x190 net/socket.c:800
       __sock_sendmsg net/socket.c:818 [inline]
       ____sys_sendmsg+0x54e/0x850 net/socket.c:2715
       ___sys_sendmsg+0x2a6/0x360 net/socket.c:2769
       __sys_sendmsg net/socket.c:2801 [inline]
       __do_sys_sendmsg net/socket.c:2806 [inline]
       __se_sys_sendmsg net/socket.c:2804 [inline]
       __x64_sys_sendmsg+0x1b1/0x290 net/socket.c:2804
       do_syscall_x64 arch/x86/entry/syscall_64.c:61 [inline]
       do_syscall_64+0x166/0x520 arch/x86/entry/syscall_64.c:84
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #2 (&q->q_usage_counter(io)#50){++++}-{0:0}:
       blk_alloc_queue+0x544/0x690 block/blk-core.c:505
       blk_mq_alloc_queue block/blk-mq.c:4460 [inline]
       __blk_mq_alloc_disk+0x194/0x390 block/blk-mq.c:4507
       nbd_dev_add+0x494/0xb60 drivers/block/nbd.c:1996
       nbd_init+0x168/0x1f0 drivers/block/nbd.c:2743
       do_one_initcall+0x250/0x870 init/main.c:1419
       do_initcall_level+0x10a/0x1a0 init/main.c:1481
       do_initcalls+0x59/0xa0 init/main.c:1497
       kernel_init_freeable+0x29d/0x3e0 init/main.c:1732
       kernel_init+0x22/0x1d0 init/main.c:1622
       ret_from_fork+0x514/0xb70 arch/x86/kernel/process.c:158
       ret_from_fork_asm+0x1a/0x30 arch/x86/entry/entry_64.S:245

-> #1 (fs_reclaim){+.+.}-{0:0}:
       __fs_reclaim_acquire mm/page_alloc.c:4390 [inline]
       fs_reclaim_acquire+0x71/0x100 mm/page_alloc.c:4404
       might_alloc include/linux/sched/mm.h:316 [inline]
       slab_pre_alloc_hook mm/slub.c:4673 [inline]
       slab_alloc_node mm/slub.c:5011 [inline]
       __do_kmalloc_node mm/slub.c:5530 [inline]
       __kmalloc_noprof+0xbc/0x710 mm/slub.c:5556
       generate_sched_domains kernel/cgroup/cpuset.c:924 [inline]
       rebuild_sched_domains_locked+0x608/0x950 kernel/cgroup/cpuset.c:1046
       rebuild_sched_domains_cpuslocked kernel/cgroup/cpuset.c:1078 [inline]
       cpuset_handle_hotplug+0xff9/0x10b0 kernel/cgroup/cpuset.c:4187
       cpuset_cpu_inactive kernel/sched/core.c:8634 [inline]
       sched_cpu_deactivate+0x7cb/0xf00 kernel/sched/core.c:8752
       cpuhp_invoke_callback+0x434/0x810 kernel/cpu.c:194
       cpuhp_thread_fun+0x362/0x780 kernel/cpu.c:1109
       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

-> #0 (cpuset_mutex){+.+.}-{4:4}:
       check_prev_add kernel/locking/lockdep.c:3209 [inline]
       check_prevs_add kernel/locking/lockdep.c:3328 [inline]
       validate_chain kernel/locking/lockdep.c:3952 [inline]
       __lock_acquire+0x164c/0x2de0 kernel/locking/lockdep.c:5288
       lock_acquire+0x115/0x350 kernel/locking/lockdep.c:5942
       __mutex_lock_common kernel/locking/mutex.c:646 [inline]
       __mutex_lock+0x197/0x15a0 kernel/locking/mutex.c:821
       cpuset_can_attach+0xac/0x1170 kernel/cgroup/cpuset.c:3226
       cgroup_migrate_execute+0x20e/0x1820 kernel/cgroup/cgroup.c:2724
       cgroup_migrate kernel/cgroup/cgroup.c:3086 [inline]
       cgroup_attach_task+0x596/0x870 kernel/cgroup/cgroup.c:3117
       __cgroup_procs_write+0x28c/0x2f0 kernel/cgroup/cgroup.c:5530
       cgroup_procs_write+0x27/0x50 kernel/cgroup/cgroup.c:5543
       cgroup_file_write+0x331/0x8f0 kernel/cgroup/cgroup.c:4426
       kernfs_fop_write_iter+0x3a4/0x540 fs/kernfs/file.c:345
       new_sync_write fs/read_write.c:595 [inline]
       vfs_write+0x612/0xba0 fs/read_write.c:687
       ksys_write+0x150/0x270 fs/read_write.c:1036
       do_syscall_x64 arch/x86/entry/syscall_64.c:61 [inline]
       do_syscall_64+0x166/0x520 arch/x86/entry/syscall_64.c:84
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

other info that might help us debug this:

Chain exists of:
  cpuset_mutex --> cpu_hotplug_lock --> cgroup_threadgroup_rwsem

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(cgroup_threadgroup_rwsem);
                               lock(cpu_hotplug_lock);
                               lock(cgroup_threadgroup_rwsem);
  lock(cpuset_mutex);

 *** DEADLOCK ***

locks held by syz-executor/15837: 5, last CPU#0:
 #0: ffff88807f5ce478 (sb_writers#9){.+.+}-{0:0}, at: file_start_write include/linux/fs.h:2762 [inline]
 #0: ffff88807f5ce478 (sb_writers#9){.+.+}-{0:0}, at: vfs_write+0x22b/0xba0 fs/read_write.c:683
 #1: ffff88805d27a880 (&of->mutex){+.+.}-{4:4}, at: kernfs_fop_write_iter+0x1d8/0x540 fs/kernfs/file.c:336
 #2: ffffffff9019aa60 (cgroup_mutex){+.+.}-{4:4}, at: cgroup_lock include/linux/cgroup.h:485 [inline]
 #2: ffffffff9019aa60 (cgroup_mutex){+.+.}-{4:4}, at: cgroup_kn_lock_live+0x14f/0x260 kernel/cgroup/cgroup.c:1713
 #3: ffffffff8ffe61d0 (cpu_hotplug_lock){++++}-{0:0}, at: cgroup_attach_lock kernel/cgroup/cgroup.c:2544 [inline]
 #3: ffffffff8ffe61d0 (cpu_hotplug_lock){++++}-{0:0}, at: cgroup_procs_write_start+0x568/0x900 kernel/cgroup/cgroup.c:3182
 #4: ffffffff9019add0 (cgroup_threadgroup_rwsem){++++}-{0:0}, at: cgroup_attach_lock kernel/cgroup/cgroup.c:2550 [inline]
 #4: ffffffff9019add0 (cgroup_threadgroup_rwsem){++++}-{0:0}, at: cgroup_procs_write_start+0x574/0x900 kernel/cgroup/cgroup.c:3182

stack backtrace:
CPU: 0 UID: 0 PID: 15837 Comm: syz-executor Tainted: G S           L      syzkaller #0 PREEMPT(full) 
Tainted: [S]=CPU_OUT_OF_SPEC, [L]=SOFTLOCKUP
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 10/15/2026
Call Trace:
 <TASK>
 dump_stack_lvl+0xe8/0x150 lib/dump_stack.c:120
 print_circular_bug+0x2e2/0x300 kernel/locking/lockdep.c:2087
 check_noncircular+0x12f/0x150 kernel/locking/lockdep.c:2219
 check_prev_add kernel/locking/lockdep.c:3209 [inline]
 check_prevs_add kernel/locking/lockdep.c:3328 [inline]
 validate_chain kernel/locking/lockdep.c:3952 [inline]
 __lock_acquire+0x164c/0x2de0 kernel/locking/lockdep.c:5288
 lock_acquire+0x115/0x350 kernel/locking/lockdep.c:5942
 __mutex_lock_common kernel/locking/mutex.c:646 [inline]
 __mutex_lock+0x197/0x15a0 kernel/locking/mutex.c:821
 cpuset_can_attach+0xac/0x1170 kernel/cgroup/cpuset.c:3226
 cgroup_migrate_execute+0x20e/0x1820 kernel/cgroup/cgroup.c:2724
 cgroup_migrate kernel/cgroup/cgroup.c:3086 [inline]
 cgroup_attach_task+0x596/0x870 kernel/cgroup/cgroup.c:3117
 __cgroup_procs_write+0x28c/0x2f0 kernel/cgroup/cgroup.c:5530
 cgroup_procs_write+0x27/0x50 kernel/cgroup/cgroup.c:5543
 cgroup_file_write+0x331/0x8f0 kernel/cgroup/cgroup.c:4426
 kernfs_fop_write_iter+0x3a4/0x540 fs/kernfs/file.c:345
 new_sync_write fs/read_write.c:595 [inline]
 vfs_write+0x612/0xba0 fs/read_write.c:687
 ksys_write+0x150/0x270 fs/read_write.c:1036
 do_syscall_x64 arch/x86/entry/syscall_64.c:61 [inline]
 do_syscall_64+0x166/0x520 arch/x86/entry/syscall_64.c:84
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f696f56034e
Code: 08 0f 85 a5 a8 ff ff 49 89 fb 48 89 f0 48 89 d7 48 89 ce 4c 89 c2 4d 89 ca 4c 8b 44 24 08 4c 8b 4c 24 10 4c 89 5c 24 08 0f 05 <c3> 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 80 00 00 00 00 48 83 ec 08
RSP: 002b:00007ffe2c5e9878 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
RAX: ffffffffffffffda RBX: 000055557a9d2500 RCX: 00007f696f56034e
RDX: 0000000000000001 RSI: 00007ffe2c5e9900 RDI: 0000000000000003
RBP: 00007ffe2c5e9e70 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000001
R13: 00007ffe2c5e9900 R14: 00007ffe2c5e9e30 R15: 00007ffe2c5e9e70
 </TASK>

Crashes (1):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2026/11/03 16:10 linux-next 2637bdec0535 d02c3949 .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-rust-kasan-gce possible deadlock in cpuset_can_attach
* Struck through repros no longer work on HEAD.