All of lore.kernel.org
 help / color / mirror / Atom feed
From: syzbot <syzbot+708f34079caa31416e39@syzkaller.appspotmail.com>
To: ap420073@gmail.com, davem@davemloft.net, kuba@kernel.org,
	linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
	syzkaller-bugs@googlegroups.com, xiyou.wangcong@gmail.com
Subject: possible deadlock in dev_uc_unsync
Date: Tue, 14 Jul 2020 09:37:22 -0700	[thread overview]
Message-ID: <000000000000e8398205aa696bc3@google.com> (raw)

Hello,

syzbot found the following crash on:

HEAD commit:    8fb49c01 Merge branch 'Expose-port-split-attributes'
git tree:       net-next
console output: https://syzkaller.appspot.com/x/log.txt?x=1196f38f100000
kernel config:  https://syzkaller.appspot.com/x/.config?x=415c682f6b7a0cbf
dashboard link: https://syzkaller.appspot.com/bug?extid=708f34079caa31416e39
compiler:       gcc (GCC) 10.1.0-syz 20200507

Unfortunately, I don't have any reproducer for this crash yet.

IMPORTANT: if you fix the bug, please add the following tag to the commit:
Reported-by: syzbot+708f34079caa31416e39@syzkaller.appspotmail.com

device bridge_slave_1 left promiscuous mode
bridge0: port 2(bridge_slave_1) entered disabled state
device bridge_slave_0 left promiscuous mode
bridge0: port 1(bridge_slave_0) entered disabled state
======================================================
WARNING: possible circular locking dependency detected
5.8.0-rc2-syzkaller #0 Not tainted
------------------------------------------------------
kworker/u4:3/91 is trying to acquire lock:
ffff8880a25c8280 (&vlan_netdev_addr_lock_key/1){+...}-{2:2}, at: netif_addr_lock_nested include/linux/netdevice.h:4243 [inline]
ffff8880a25c8280 (&vlan_netdev_addr_lock_key/1){+...}-{2:2}, at: dev_uc_unsync net/core/dev_addr_lists.c:694 [inline]
ffff8880a25c8280 (&vlan_netdev_addr_lock_key/1){+...}-{2:2}, at: dev_uc_unsync+0xf4/0x190 net/core/dev_addr_lists.c:688

but task is already holding lock:
ffff8880a74f2280 (&macvlan_netdev_addr_lock_key/1){+...}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:358 [inline]
ffff8880a74f2280 (&macvlan_netdev_addr_lock_key/1){+...}-{2:2}, at: netif_addr_lock_bh include/linux/netdevice.h:4248 [inline]
ffff8880a74f2280 (&macvlan_netdev_addr_lock_key/1){+...}-{2:2}, at: dev_uc_unsync net/core/dev_addr_lists.c:693 [inline]
ffff8880a74f2280 (&macvlan_netdev_addr_lock_key/1){+...}-{2:2}, at: dev_uc_unsync+0xb0/0x190 net/core/dev_addr_lists.c:688

which lock already depends on the new lock.


the existing dependency chain (in reverse order) is:

-> #1 (&macvlan_netdev_addr_lock_key/1){+...}-{2:2}:
       _raw_spin_lock_nested+0x30/0x40 kernel/locking/spinlock.c:361
       netif_addr_lock_nested include/linux/netdevice.h:4243 [inline]
       dev_mc_unsync net/core/dev_addr_lists.c:915 [inline]
       dev_mc_unsync+0xf4/0x190 net/core/dev_addr_lists.c:909
       vlan_dev_stop+0x51/0x350 net/8021q/vlan_dev.c:315
       __dev_close_many+0x1b3/0x2e0 net/core/dev.c:1605
       dev_close_many+0x238/0x650 net/core/dev.c:1630
       rollback_registered_many+0x3af/0xf60 net/core/dev.c:8953
       unregister_netdevice_many.part.0+0x1a/0x2f0 net/core/dev.c:10121
       unregister_netdevice_many net/core/dev.c:10120 [inline]
       default_device_exit_batch+0x30c/0x3d0 net/core/dev.c:10604
       ops_exit_list+0x10d/0x160 net/core/net_namespace.c:189
       cleanup_net+0x4ea/0xa00 net/core/net_namespace.c:603
       process_one_work+0x94c/0x1670 kernel/workqueue.c:2269
       worker_thread+0x64c/0x1120 kernel/workqueue.c:2415
       kthread+0x3b5/0x4a0 kernel/kthread.c:291
       ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:293

-> #0 (&vlan_netdev_addr_lock_key/1){+...}-{2:2}:
       check_prev_add kernel/locking/lockdep.c:2496 [inline]
       check_prevs_add kernel/locking/lockdep.c:2601 [inline]
       validate_chain kernel/locking/lockdep.c:3218 [inline]
       __lock_acquire+0x2acb/0x56e0 kernel/locking/lockdep.c:4380
       lock_acquire+0x1f1/0xad0 kernel/locking/lockdep.c:4959
       _raw_spin_lock_nested+0x30/0x40 kernel/locking/spinlock.c:361
       netif_addr_lock_nested include/linux/netdevice.h:4243 [inline]
       dev_uc_unsync net/core/dev_addr_lists.c:694 [inline]
       dev_uc_unsync+0xf4/0x190 net/core/dev_addr_lists.c:688
       macvlan_stop+0xfe/0x4c0 drivers/net/macvlan.c:678
       __dev_close_many+0x1b3/0x2e0 net/core/dev.c:1605
       dev_close_many+0x238/0x650 net/core/dev.c:1630
       rollback_registered_many+0x3af/0xf60 net/core/dev.c:8953
       unregister_netdevice_many.part.0+0x1a/0x2f0 net/core/dev.c:10121
       unregister_netdevice_many net/core/dev.c:10120 [inline]
       default_device_exit_batch+0x30c/0x3d0 net/core/dev.c:10604
       ops_exit_list+0x10d/0x160 net/core/net_namespace.c:189
       cleanup_net+0x4ea/0xa00 net/core/net_namespace.c:603
       process_one_work+0x94c/0x1670 kernel/workqueue.c:2269
       worker_thread+0x64c/0x1120 kernel/workqueue.c:2415
       kthread+0x3b5/0x4a0 kernel/kthread.c:291
       ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:293

other info that might help us debug this:

 Possible unsafe locking scenario:

       CPU0                    CPU1
       ----                    ----
  lock(&macvlan_netdev_addr_lock_key/1);
                               lock(&vlan_netdev_addr_lock_key/1);
                               lock(&macvlan_netdev_addr_lock_key/1);
  lock(&vlan_netdev_addr_lock_key/1);

 *** DEADLOCK ***

5 locks held by kworker/u4:3/91:
 #0: ffff8880a97ad138 ((wq_completion)netns){+.+.}-{0:0}, at: arch_atomic64_set arch/x86/include/asm/atomic64_64.h:34 [inline]
 #0: ffff8880a97ad138 ((wq_completion)netns){+.+.}-{0:0}, at: atomic64_set include/asm-generic/atomic-instrumented.h:856 [inline]
 #0: ffff8880a97ad138 ((wq_completion)netns){+.+.}-{0:0}, at: atomic_long_set include/asm-generic/atomic-long.h:41 [inline]
 #0: ffff8880a97ad138 ((wq_completion)netns){+.+.}-{0:0}, at: set_work_data kernel/workqueue.c:616 [inline]
 #0: ffff8880a97ad138 ((wq_completion)netns){+.+.}-{0:0}, at: set_work_pool_and_clear_pending kernel/workqueue.c:643 [inline]
 #0: ffff8880a97ad138 ((wq_completion)netns){+.+.}-{0:0}, at: process_one_work+0x82b/0x1670 kernel/workqueue.c:2240
 #1: ffffc90000e57da8 (net_cleanup_work){+.+.}-{0:0}, at: process_one_work+0x85f/0x1670 kernel/workqueue.c:2244
 #2: ffffffff8a7a4930 (pernet_ops_rwsem){++++}-{3:3}, at: cleanup_net+0x9b/0xa00 net/core/net_namespace.c:565
 #3: ffffffff8a7b17a8 (rtnl_mutex){+.+.}-{3:3}, at: rtnl_lock_unregistering net/core/dev.c:10557 [inline]
 #3: ffffffff8a7b17a8 (rtnl_mutex){+.+.}-{3:3}, at: default_device_exit_batch+0xea/0x3d0 net/core/dev.c:10595
 #4: ffff8880a74f2280 (&macvlan_netdev_addr_lock_key/1){+...}-{2:2}, at: spin_lock_bh include/linux/spinlock.h:358 [inline]
 #4: ffff8880a74f2280 (&macvlan_netdev_addr_lock_key/1){+...}-{2:2}, at: netif_addr_lock_bh include/linux/netdevice.h:4248 [inline]
 #4: ffff8880a74f2280 (&macvlan_netdev_addr_lock_key/1){+...}-{2:2}, at: dev_uc_unsync net/core/dev_addr_lists.c:693 [inline]
 #4: ffff8880a74f2280 (&macvlan_netdev_addr_lock_key/1){+...}-{2:2}, at: dev_uc_unsync+0xb0/0x190 net/core/dev_addr_lists.c:688

stack backtrace:
CPU: 1 PID: 91 Comm: kworker/u4:3 Not tainted 5.8.0-rc2-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Workqueue: netns cleanup_net
Call Trace:
 __dump_stack lib/dump_stack.c:77 [inline]
 dump_stack+0x18f/0x20d lib/dump_stack.c:118
 check_noncircular+0x324/0x3e0 kernel/locking/lockdep.c:1827
 check_prev_add kernel/locking/lockdep.c:2496 [inline]
 check_prevs_add kernel/locking/lockdep.c:2601 [inline]
 validate_chain kernel/locking/lockdep.c:3218 [inline]
 __lock_acquire+0x2acb/0x56e0 kernel/locking/lockdep.c:4380
 lock_acquire+0x1f1/0xad0 kernel/locking/lockdep.c:4959
 _raw_spin_lock_nested+0x30/0x40 kernel/locking/spinlock.c:361
 netif_addr_lock_nested include/linux/netdevice.h:4243 [inline]
 dev_uc_unsync net/core/dev_addr_lists.c:694 [inline]
 dev_uc_unsync+0xf4/0x190 net/core/dev_addr_lists.c:688
 macvlan_stop+0xfe/0x4c0 drivers/net/macvlan.c:678
 __dev_close_many+0x1b3/0x2e0 net/core/dev.c:1605
 dev_close_many+0x238/0x650 net/core/dev.c:1630
 rollback_registered_many+0x3af/0xf60 net/core/dev.c:8953
 unregister_netdevice_many.part.0+0x1a/0x2f0 net/core/dev.c:10121
 unregister_netdevice_many net/core/dev.c:10120 [inline]
 default_device_exit_batch+0x30c/0x3d0 net/core/dev.c:10604
 ops_exit_list+0x10d/0x160 net/core/net_namespace.c:189
 cleanup_net+0x4ea/0xa00 net/core/net_namespace.c:603
 process_one_work+0x94c/0x1670 kernel/workqueue.c:2269
 worker_thread+0x64c/0x1120 kernel/workqueue.c:2415
 kthread+0x3b5/0x4a0 kernel/kthread.c:291
 ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:293
device veth1_to_batadv left promiscuous mode
device veth0_to_team left promiscuous mode
device veth1_to_bridge left promiscuous mode
device veth0 left promiscuous mode
device veth1_macvtap left promiscuous mode
device veth0_macvtap left promiscuous mode
device veth1_vlan left promiscuous mode
device veth0_vlan left promiscuous mode
bond0 (unregistering): (slave macvlan60): Releasing backup interface
bond0 (unregistering): (slave macvlan59): Releasing backup interface
bond0 (unregistering): (slave macvlan58): Releasing backup interface
bond0 (unregistering): (slave macvlan57): Releasing backup interface
bond0 (unregistering): (slave macvlan56): Releasing backup interface
bond0 (unregistering): (slave macvlan55): Releasing backup interface
bond0 (unregistering): (slave macvlan54): Releasing backup interface
bond0 (unregistering): (slave macvlan53): Releasing backup interface
bond0 (unregistering): (slave macvlan52): Releasing backup interface
bond0 (unregistering): (slave macvlan51): Releasing backup interface
bond0 (unregistering): (slave macvlan50): Releasing backup interface
bond0 (unregistering): (slave macvlan49): Releasing backup interface
bond0 (unregistering): (slave macvlan48): Releasing backup interface
bond0 (unregistering): (slave macvlan47): Releasing backup interface
bond0 (unregistering): (slave macvlan46): Releasing backup interface
bond0 (unregistering): (slave macvlan45): Releasing backup interface
bond0 (unregistering): (slave macvlan44): Releasing backup interface
bond0 (unregistering): (slave macvlan43): Releasing backup interface
bond0 (unregistering): (slave macvlan42): Releasing backup interface
bond0 (unregistering): (slave macvlan41): Releasing backup interface
bond0 (unregistering): (slave macvlan40): Releasing backup interface
bond0 (unregistering): (slave macvlan39): Releasing backup interface
bond0 (unregistering): (slave macvlan38): Releasing backup interface
bond0 (unregistering): (slave macvlan37): Releasing backup interface
bond0 (unregistering): (slave macvlan36): Releasing backup interface
bond0 (unregistering): (slave macvlan35): Releasing backup interface
bond0 (unregistering): (slave macvlan34): Releasing backup interface
bond0 (unregistering): (slave macvlan33): Releasing backup interface
bond0 (unregistering): (slave macvlan32): Releasing backup interface
bond0 (unregistering): (slave macvlan31): Releasing backup interface
bond0 (unregistering): (slave macvlan30): Releasing backup interface
bond0 (unregistering): (slave macvlan29): Releasing backup interface
bond0 (unregistering): (slave macvlan28): Releasing backup interface
bond0 (unregistering): (slave macvlan27): Releasing backup interface
bond0 (unregistering): (slave macvlan26): Releasing backup interface
bond0 (unregistering): (slave macvlan25): Releasing backup interface
bond0 (unregistering): (slave macvlan24): Releasing backup interface
bond0 (unregistering): (slave macvlan23): Releasing backup interface
bond0 (unregistering): (slave macvlan22): Releasing backup interface
bond0 (unregistering): (slave macvlan21): Releasing backup interface
bond0 (unregistering): (slave macvlan20): Releasing backup interface
bond0 (unregistering): (slave macvlan19): Releasing backup interface
bond0 (unregistering): (slave macvlan18): Releasing backup interface
bond0 (unregistering): (slave macvlan17): Releasing backup interface
bond0 (unregistering): (slave macvlan16): Releasing backup interface
bond0 (unregistering): (slave macvlan15): Releasing backup interface
bond0 (unregistering): (slave macvlan14): Releasing backup interface
bond0 (unregistering): (slave macvlan13): Releasing backup interface
bond0 (unregistering): (slave macvlan12): Releasing backup interface
bond0 (unregistering): (slave macvlan11): Releasing backup interface
bond0 (unregistering): (slave macvlan10): Releasing backup interface
bond0 (unregistering): (slave macvlan9): Releasing backup interface
bond0 (unregistering): (slave macvlan8): Releasing backup interface
bond0 (unregistering): (slave macvlan7): Releasing backup interface
bond0 (unregistering): (slave macvlan6): Releasing backup interface
bond0 (unregistering): (slave macvlan5): Releasing backup interface
bond0 (unregistering): (slave macvlan4): Releasing backup interface
bond0 (unregistering): (slave macvlan3): Releasing backup interface
bond0 (unregistering): (slave macvlan2): Releasing backup interface
team0 (unregistering): Port device team_slave_1 removed
team0 (unregistering): Port device team_slave_0 removed
bond0 (unregistering): (slave bond_slave_1): Releasing backup interface
bond0 (unregistering): (slave bond_slave_0): Releasing backup interface
bond0 (unregistering): Released all slaves


---
This bug is generated by a bot. It may contain errors.
See https://goo.gl/tpsmEJ for more information about syzbot.
syzbot engineers can be reached at syzkaller@googlegroups.com.

syzbot will keep track of this bug report. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.

                 reply	other threads:[~2020-07-14 16:37 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=000000000000e8398205aa696bc3@google.com \
    --to=syzbot+708f34079caa31416e39@syzkaller.appspotmail.com \
    --cc=ap420073@gmail.com \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=syzkaller-bugs@googlegroups.com \
    --cc=xiyou.wangcong@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.