WARNING: ODEBUG bug in netdev_run_todo

49 views
Skip to first unread message

syzbot

unread,
Aug 4, 2020, 2:37:21 PM8/4/20
to gre...@linuxfoundation.org, linux-...@vger.kernel.org, raf...@kernel.org, syzkall...@googlegroups.com
Hello,

syzbot found the following issue on:

HEAD commit: c0842fbc random32: move the pseudo-random 32-bit definitio..
git tree: upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=10d7403a900000
kernel config: https://syzkaller.appspot.com/x/.config?x=76cacb0fe58c4a1e
dashboard link: https://syzkaller.appspot.com/bug?extid=f9484b345f41843fc9a9
compiler: clang version 10.0.0 (https://github.com/llvm/llvm-project/ c2443155a0fb245c8f17f2c1c72b6ea391e86e81)
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=1733e03a900000

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

------------[ cut here ]------------
ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x80 arch/x86/include/asm/paravirt.h:770
WARNING: CPU: 0 PID: 6856 at lib/debugobjects.c:488 debug_print_object lib/debugobjects.c:485 [inline]
WARNING: CPU: 0 PID: 6856 at lib/debugobjects.c:488 __debug_check_no_obj_freed lib/debugobjects.c:967 [inline]
WARNING: CPU: 0 PID: 6856 at lib/debugobjects.c:488 debug_check_no_obj_freed+0x45c/0x640 lib/debugobjects.c:998
Kernel panic - not syncing: panic_on_warn set ...
CPU: 0 PID: 6856 Comm: kworker/u4:0 Not tainted 5.8.0-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+0x1f0/0x31e lib/dump_stack.c:118
panic+0x264/0x7a0 kernel/panic.c:231
__warn+0x227/0x250 kernel/panic.c:600
report_bug+0x1b1/0x2e0 lib/bug.c:198
handle_bug+0x42/0x80 arch/x86/kernel/traps.c:235
exc_invalid_op+0x16/0x40 arch/x86/kernel/traps.c:255
asm_exc_invalid_op+0x12/0x20 arch/x86/include/asm/idtentry.h:547
RIP: 0010:debug_print_object lib/debugobjects.c:485 [inline]
RIP: 0010:__debug_check_no_obj_freed lib/debugobjects.c:967 [inline]
RIP: 0010:debug_check_no_obj_freed+0x45c/0x640 lib/debugobjects.c:998
Code: 74 08 4c 89 f7 e8 04 ce 12 fe 4d 8b 06 48 c7 c7 5f d3 14 89 48 c7 c6 f6 b1 12 89 48 89 da 89 e9 4d 89 f9 31 c0 e8 94 60 a5 fd <0f> 0b 48 ba 00 00 00 00 00 fc ff df ff 05 0e 8f ec 05 48 8b 5c 24
RSP: 0018:ffffc90001867a10 EFLAGS: 00010046
RAX: 480b12f763965400 RBX: ffffffff8918d390 RCX: ffff8880a7904580
RDX: 0000000000000000 RSI: 0000000080000000 RDI: 0000000000000000
RBP: 0000000000000000 R08: ffffffff815e07c9 R09: ffffed1015d041c3
R10: ffffed1015d041c3 R11: 0000000000000000 R12: ffff888090ed4474
R13: ffffffff8ba62fe0 R14: ffffffff894eeca0 R15: ffffffff814c72d0
kfree+0xfc/0x220 mm/slab.c:3756
device_release+0x70/0x1a0 drivers/base/core.c:1575
kobject_cleanup lib/kobject.c:693 [inline]
kobject_release lib/kobject.c:722 [inline]
kref_put include/linux/kref.h:65 [inline]
kobject_put+0x15b/0x220 lib/kobject.c:739
netdev_run_todo+0xb17/0xc90 net/core/dev.c:9797
default_device_exit_batch+0x66a/0x6b0 net/core/dev.c:10597
ops_exit_list net/core/net_namespace.c:189 [inline]
cleanup_net+0x79c/0xba0 net/core/net_namespace.c:603
process_one_work+0x789/0xfc0 kernel/workqueue.c:2269
worker_thread+0xaa4/0x1460 kernel/workqueue.c:2415
kthread+0x37e/0x3a0 drivers/block/aoe/aoecmd.c:1234
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:293
Kernel Offset: disabled
Rebooting in 86400 seconds..


---
This report 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 syzk...@googlegroups.com.

syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
syzbot can test patches for this issue, for details see:
https://goo.gl/tpsmEJ#testing-patches

syzbot

unread,
Mar 25, 2021, 3:25:15 AM3/25/21
to gre...@linuxfoundation.org, linux-...@vger.kernel.org, raf...@kernel.org, syzkall...@googlegroups.com
syzbot has found a reproducer for the following issue on:

HEAD commit: 4ee998b0 Merge tag 'clk-fixes-for-linus' of git://git.kern..
git tree: upstream
console output: https://syzkaller.appspot.com/x/log.txt?x=100e7bb2d00000
kernel config: https://syzkaller.appspot.com/x/.config?x=5a2f679991921995
dashboard link: https://syzkaller.appspot.com/bug?extid=f9484b345f41843fc9a9
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=1192d621d00000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1071301cd00000

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

bond0 (unregistering): (slave bond_slave_1): Releasing backup interface
bond0 (unregistering): (slave bond_slave_0): Releasing backup interface
bond0 (unregistering): Released all slaves
------------[ cut here ]------------
ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x90 kernel/workqueue.c:1601
WARNING: CPU: 0 PID: 25 at lib/debugobjects.c:505 debug_print_object+0x16e/0x250 lib/debugobjects.c:505
Modules linked in:
CPU: 0 PID: 25 Comm: kworker/u4:1 Not tainted 5.12.0-rc4-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Workqueue: netns cleanup_net
RIP: 0010:debug_print_object+0x16e/0x250 lib/debugobjects.c:505
Code: ff df 48 89 fa 48 c1 ea 03 80 3c 02 00 0f 85 af 00 00 00 48 8b 14 dd 60 97 c1 89 4c 89 ee 48 c7 c7 60 8b c1 89 e8 68 c4 f8 04 <0f> 0b 83 05 45 f1 f9 09 01 48 83 c4 18 5b 5d 41 5c 41 5d 41 5e c3
RSP: 0018:ffffc90000e17898 EFLAGS: 00010086
RAX: 0000000000000000 RBX: 0000000000000003 RCX: 0000000000000000
RDX: ffff8880118b22c0 RSI: ffffffff815b80e5 RDI: fffff520001c2f05
RBP: 0000000000000001 R08: 0000000000000000 R09: 0000000000000000
R10: ffffffff815b0e4e R11: 0000000000000000 R12: ffffffff896d69a0
R13: ffffffff89c191a0 R14: ffffffff81621150 R15: dffffc0000000000
FS: 0000000000000000(0000) GS:ffff8880b9c00000(0000) knlGS:0000000000000000
CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
CR2: 0000562596db1338 CR3: 000000000bc8e000 CR4: 00000000001506f0
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Call Trace:
__debug_check_no_obj_freed lib/debugobjects.c:987 [inline]
debug_check_no_obj_freed+0x301/0x420 lib/debugobjects.c:1018
kfree+0xd1/0x2b0 mm/slab.c:3795
kvfree+0x42/0x50 mm/util.c:616
device_release+0x9f/0x240 drivers/base/core.c:2108
kobject_cleanup lib/kobject.c:705 [inline]
kobject_release lib/kobject.c:736 [inline]
kref_put include/linux/kref.h:65 [inline]
kobject_put+0x1c8/0x540 lib/kobject.c:753
netdev_run_todo+0x96a/0xdd0 net/core/dev.c:10475
default_device_exit_batch+0x2ff/0x3c0 net/core/dev.c:11426
ops_exit_list+0x10d/0x160 net/core/net_namespace.c:178
cleanup_net+0x4ea/0xb10 net/core/net_namespace.c:595
process_one_work+0x98d/0x1600 kernel/workqueue.c:2275
worker_thread+0x64c/0x1120 kernel/workqueue.c:2421
kthread+0x3b1/0x4a0 kernel/kthread.c:292
ret_from_fork+0x1f/0x30 arch/x86/entry/entry_64.S:294

Hillf Danton

unread,
Mar 25, 2021, 5:59:33 AM3/25/21
to syzbot, gre...@linuxfoundation.org, linux-...@vger.kernel.org, Hillf Danton, raf...@kernel.org, syzkall...@googlegroups.com
On Thu, 25 Mar 2021 00:25:15
Make sure delayed work is canceled on putting the slave kobj.

--- x/include/net/bonding.h
+++ y/include/net/bonding.h
@@ -167,6 +167,7 @@ struct slave {
u8 backup:1, /* indicates backup slave. Value corresponds with
BOND_STATE_ACTIVE and BOND_STATE_BACKUP */
inactive:1, /* indicates inactive slave */
+ exiting:1,
should_notify:1, /* indicates whether the state changed */
should_notify_link:1; /* indicates whether the link changed */
u8 duplex;
--- x/drivers/net/bonding/bond_main.c
+++ y/drivers/net/bonding/bond_main.c
@@ -1489,6 +1489,9 @@ static void slave_kobj_release(struct ko
struct slave *slave = to_slave(kobj);
struct bonding *bond = bond_get_bond_by_slave(slave);

+ slave->exiting = 1;
+ cancel_delayed_work_sync(&slave->notify_work);
+ /* make sure kworker sees exiting */
cancel_delayed_work_sync(&slave->notify_work);
if (BOND_MODE(bond) == BOND_MODE_8023AD)
kfree(SLAVE_AD_INFO(slave));
@@ -1562,6 +1565,8 @@ static void bond_netdev_notify_work(stru
{
struct slave *slave = container_of(_work, struct slave,
notify_work.work);
+ if (slave->exiting)
+ return;

if (rtnl_trylock()) {
struct netdev_bonding_info binfo;
Reply all
Reply to author
Forward
0 new messages