syzbot


possible deadlock in dev_set_promiscuity

Status: upstream: reported on 2025/06/02 07:40
Subsystems: net
[Documentation on labels]
Reported-by: syzbot+58c65777e7d41ac833a9@syzkaller.appspotmail.com
First crash: 37d, last: 12d
Discussions (1)
Title Replies (including bot) Last reply
[syzbot] [net?] possible deadlock in dev_set_promiscuity 1 (2) 2025/06/03 01:49

Sample crash report:
team0: entered promiscuous mode
team_slave_0: entered promiscuous mode
team_slave_1: entered promiscuous mode
vlan2: entered promiscuous mode
======================================================
WARNING: possible circular locking dependency detected
6.16.0-rc1-syzkaller-00203-g4774cfe3543a #0 Not tainted
------------------------------------------------------
syz.9.1262/12939 is trying to acquire lock:
ffff8880316f0d30 (&dev_instance_lock_key#20){+.+.}-{4:4}, at: netdev_lock include/linux/netdevice.h:2756 [inline]
ffff8880316f0d30 (&dev_instance_lock_key#20){+.+.}-{4:4}, at: netdev_lock_ops include/net/netdev_lock.h:42 [inline]
ffff8880316f0d30 (&dev_instance_lock_key#20){+.+.}-{4:4}, at: dev_set_promiscuity+0x10e/0x260 net/core/dev_api.c:286

but task is already holding lock:
ffff88807c268e00 (team->team_lock_key#9){+.+.}-{4:4}, at: team_change_rx_flags+0x38/0x220 drivers/net/team/team_core.c:1781

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #1 (team->team_lock_key#9){+.+.}-{4:4}:
       lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5871
       __mutex_lock_common kernel/locking/mutex.c:602 [inline]
       __mutex_lock+0x182/0xe80 kernel/locking/mutex.c:747
       team_port_change_check drivers/net/team/team_core.c:2966 [inline]
       team_device_event+0x182/0xa20 drivers/net/team/team_core.c:2992
       notifier_call_chain+0x1b3/0x3e0 kernel/notifier.c:85
       call_netdevice_notifiers_extack net/core/dev.c:2268 [inline]
       call_netdevice_notifiers net/core/dev.c:2282 [inline]
       dev_close_many+0x29c/0x410 net/core/dev.c:1785
       vlan_device_event+0x1748/0x1d00 net/8021q/vlan.c:449
       notifier_call_chain+0x1b3/0x3e0 kernel/notifier.c:85
       call_netdevice_notifiers_extack net/core/dev.c:2268 [inline]
       call_netdevice_notifiers net/core/dev.c:2282 [inline]
       __dev_notify_flags+0x18d/0x2e0 net/core/dev.c:-1
       netif_change_flags+0xe8/0x1a0 net/core/dev.c:9526
       do_setlink+0xc55/0x41c0 net/core/rtnetlink.c:3141
       rtnl_group_changelink net/core/rtnetlink.c:3773 [inline]
       __rtnl_newlink net/core/rtnetlink.c:3927 [inline]
       rtnl_newlink+0x149f/0x1c70 net/core/rtnetlink.c:4055
       rtnetlink_rcv_msg+0x7cf/0xb70 net/core/rtnetlink.c:6944
       netlink_rcv_skb+0x205/0x470 net/netlink/af_netlink.c:2534
       netlink_unicast_kernel net/netlink/af_netlink.c:1313 [inline]
       netlink_unicast+0x758/0x8d0 net/netlink/af_netlink.c:1339
       netlink_sendmsg+0x805/0xb30 net/netlink/af_netlink.c:1883
       sock_sendmsg_nosec net/socket.c:712 [inline]
       __sock_sendmsg+0x21c/0x270 net/socket.c:727
       ____sys_sendmsg+0x505/0x830 net/socket.c:2566
       ___sys_sendmsg+0x21f/0x2a0 net/socket.c:2620
       __sys_sendmsg net/socket.c:2652 [inline]
       __do_sys_sendmsg net/socket.c:2657 [inline]
       __se_sys_sendmsg net/socket.c:2655 [inline]
       __x64_sys_sendmsg+0x19b/0x260 net/socket.c:2655
       do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
       do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

-> #0 (&dev_instance_lock_key#20){+.+.}-{4:4}:
       check_prev_add kernel/locking/lockdep.c:3168 [inline]
       check_prevs_add kernel/locking/lockdep.c:3287 [inline]
       validate_chain+0xb9b/0x2140 kernel/locking/lockdep.c:3911
       __lock_acquire+0xab9/0xd20 kernel/locking/lockdep.c:5240
       lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5871
       __mutex_lock_common kernel/locking/mutex.c:602 [inline]
       __mutex_lock+0x182/0xe80 kernel/locking/mutex.c:747
       netdev_lock include/linux/netdevice.h:2756 [inline]
       netdev_lock_ops include/net/netdev_lock.h:42 [inline]
       dev_set_promiscuity+0x10e/0x260 net/core/dev_api.c:286
       dev_change_rx_flags net/core/dev.c:9241 [inline]
       __dev_set_promiscuity+0x531/0x740 net/core/dev.c:9285
       netif_set_promiscuity+0x50/0xe0 net/core/dev.c:9305
       dev_set_promiscuity+0x126/0x260 net/core/dev_api.c:287
       team_change_rx_flags+0x123/0x220 drivers/net/team/team_core.c:1785
       dev_change_rx_flags net/core/dev.c:9241 [inline]
       __dev_set_promiscuity+0x531/0x740 net/core/dev.c:9285
       netif_set_promiscuity+0x50/0xe0 net/core/dev.c:9305
       dev_set_promiscuity+0x126/0x260 net/core/dev_api.c:287
       packet_dev_mc net/packet/af_packet.c:3698 [inline]
       packet_mc_add+0x688/0xbb0 net/packet/af_packet.c:3775
       packet_setsockopt+0xbf1/0x12c0 net/packet/af_packet.c:3860
       do_sock_setsockopt+0x257/0x3e0 net/socket.c:2296
       __sys_setsockopt net/socket.c:2321 [inline]
       __do_sys_setsockopt net/socket.c:2327 [inline]
       __se_sys_setsockopt net/socket.c:2324 [inline]
       __x64_sys_setsockopt+0x18b/0x220 net/socket.c:2324
       do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
       do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
       entry_SYSCALL_64_after_hwframe+0x77/0x7f

other info that might help us debug this:

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(team->team_lock_key#9);
                               lock(&dev_instance_lock_key#20);
                               lock(team->team_lock_key#9);
  lock(&dev_instance_lock_key#20);

 *** DEADLOCK ***

2 locks held by syz.9.1262/12939:
 #0: ffffffff8f50fe08 (rtnl_mutex){+.+.}-{4:4}, at: packet_mc_add+0x28/0xbb0 net/packet/af_packet.c:3737
 #1: ffff88807c268e00 (team->team_lock_key#9){+.+.}-{4:4}, at: team_change_rx_flags+0x38/0x220 drivers/net/team/team_core.c:1781

stack backtrace:
CPU: 1 UID: 0 PID: 12939 Comm: syz.9.1262 Not tainted 6.16.0-rc1-syzkaller-00203-g4774cfe3543a #0 PREEMPT(full) 
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 05/07/2025
Call Trace:
 <TASK>
 dump_stack_lvl+0x189/0x250 lib/dump_stack.c:120
 print_circular_bug+0x2ee/0x310 kernel/locking/lockdep.c:2046
 check_noncircular+0x134/0x160 kernel/locking/lockdep.c:2178
 check_prev_add kernel/locking/lockdep.c:3168 [inline]
 check_prevs_add kernel/locking/lockdep.c:3287 [inline]
 validate_chain+0xb9b/0x2140 kernel/locking/lockdep.c:3911
 __lock_acquire+0xab9/0xd20 kernel/locking/lockdep.c:5240
 lock_acquire+0x120/0x360 kernel/locking/lockdep.c:5871
 __mutex_lock_common kernel/locking/mutex.c:602 [inline]
 __mutex_lock+0x182/0xe80 kernel/locking/mutex.c:747
 netdev_lock include/linux/netdevice.h:2756 [inline]
 netdev_lock_ops include/net/netdev_lock.h:42 [inline]
 dev_set_promiscuity+0x10e/0x260 net/core/dev_api.c:286
 dev_change_rx_flags net/core/dev.c:9241 [inline]
 __dev_set_promiscuity+0x531/0x740 net/core/dev.c:9285
 netif_set_promiscuity+0x50/0xe0 net/core/dev.c:9305
 dev_set_promiscuity+0x126/0x260 net/core/dev_api.c:287
 team_change_rx_flags+0x123/0x220 drivers/net/team/team_core.c:1785
 dev_change_rx_flags net/core/dev.c:9241 [inline]
 __dev_set_promiscuity+0x531/0x740 net/core/dev.c:9285
 netif_set_promiscuity+0x50/0xe0 net/core/dev.c:9305
 dev_set_promiscuity+0x126/0x260 net/core/dev_api.c:287
 packet_dev_mc net/packet/af_packet.c:3698 [inline]
 packet_mc_add+0x688/0xbb0 net/packet/af_packet.c:3775
 packet_setsockopt+0xbf1/0x12c0 net/packet/af_packet.c:3860
 do_sock_setsockopt+0x257/0x3e0 net/socket.c:2296
 __sys_setsockopt net/socket.c:2321 [inline]
 __do_sys_setsockopt net/socket.c:2327 [inline]
 __se_sys_setsockopt net/socket.c:2324 [inline]
 __x64_sys_setsockopt+0x18b/0x220 net/socket.c:2324
 do_syscall_x64 arch/x86/entry/syscall_64.c:63 [inline]
 do_syscall_64+0xfa/0x3b0 arch/x86/entry/syscall_64.c:94
 entry_SYSCALL_64_after_hwframe+0x77/0x7f
RIP: 0033:0x7f3018f8e929
Code: ff ff c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 c7 c1 a8 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f3016df6038 EFLAGS: 00000246 ORIG_RAX: 0000000000000036
RAX: ffffffffffffffda RBX: 00007f30191b5fa0 RCX: 00007f3018f8e929
RDX: 0000000000000001 RSI: 0000000000000107 RDI: 0000000000000003
RBP: 00007f3019010b39 R08: 0000000000000010 R09: 0000000000000000
R10: 0000200000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 0000000000000000 R14: 00007f30191b5fa0 R15: 00007f30192dfa28
 </TASK>
netdevsim netdevsim9 netdevsim0: entered promiscuous mode

Crashes (16):
Time Kernel Commit Syzkaller Config Log Report Syz repro C repro VM info Assets (help?) Manager Title
2025/06/15 01:30 upstream 4774cfe3543a 5f4b362d .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce possible deadlock in dev_set_promiscuity
2025/06/14 19:09 upstream 4774cfe3543a 5f4b362d .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce possible deadlock in dev_set_promiscuity
2025/06/13 21:06 upstream 02adc1490e6d 98683f8f .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce possible deadlock in dev_set_promiscuity
2025/06/13 20:53 upstream 02adc1490e6d 98683f8f .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce possible deadlock in dev_set_promiscuity
2025/06/13 19:10 upstream 27605c8c0f69 98683f8f .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce possible deadlock in dev_set_promiscuity
2025/06/13 07:05 upstream 27605c8c0f69 98683f8f .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce possible deadlock in dev_set_promiscuity
2025/06/13 04:03 upstream 27605c8c0f69 98683f8f .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce possible deadlock in dev_set_promiscuity
2025/06/12 02:24 upstream 488ef3560196 98683f8f .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce possible deadlock in dev_set_promiscuity
2025/06/12 01:22 upstream 488ef3560196 98683f8f .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce possible deadlock in dev_set_promiscuity
2025/06/22 20:52 upstream 739a6c93cc75 d6cdfb8a .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-386 possible deadlock in dev_set_promiscuity
2025/06/22 20:45 upstream 739a6c93cc75 d6cdfb8a .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-386 possible deadlock in dev_set_promiscuity
2025/06/22 20:39 upstream 739a6c93cc75 d6cdfb8a .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-386 possible deadlock in dev_set_promiscuity
2025/06/22 20:29 upstream 739a6c93cc75 d6cdfb8a .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-386 possible deadlock in dev_set_promiscuity
2025/06/11 21:42 upstream 488ef3560196 98683f8f .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-386 possible deadlock in dev_set_promiscuity
2025/05/29 07:30 upstream 90b83efa6701 3d2f584d .config console log report info [disk image] [vmlinux] [kernel image] ci-upstream-kasan-gce-386 possible deadlock in dev_set_promiscuity
2025/06/15 03:54 upstream 8c6bc74c7f89 5f4b362d .config console log report info [disk image (non-bootable)] [vmlinux] [kernel image] ci-qemu-upstream-386 possible deadlock in dev_set_promiscuity
* Struck through repros no longer work on HEAD.