• E
    bonding: fix potential NULL deref in bond_update_slave_arr · a7137534
    Eric Dumazet 提交于
    syzbot got a NULL dereference in bond_update_slave_arr() [1],
    happening after a failure to allocate bond->slave_arr
    
    A workqueue (bond_slave_arr_handler) is supposed to retry
    the allocation later, but if the slave is removed before
    the workqueue had a chance to complete, bond->slave_arr
    can still be NULL.
    
    [1]
    
    Failed to build slave-array.
    kasan: CONFIG_KASAN_INLINE enabled
    kasan: GPF could be caused by NULL-ptr deref or user memory access
    general protection fault: 0000 [#1] SMP KASAN PTI
    Modules linked in:
    Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
    RIP: 0010:bond_update_slave_arr.cold+0xc6/0x198 drivers/net/bonding/bond_main.c:4039
    RSP: 0018:ffff88018fe33678 EFLAGS: 00010246
    RAX: dffffc0000000000 RBX: 0000000000000000 RCX: ffffc9000290b000
    RDX: 0000000000000000 RSI: ffffffff82b63037 RDI: ffff88019745ea20
    RBP: ffff88018fe33760 R08: ffff880170754280 R09: 0000000000000000
    R10: 0000000000000000 R11: 0000000000000000 R12: 0000000000000000
    R13: ffff88019745ea00 R14: 0000000000000000 R15: ffff88018fe338b0
    FS:  00007febd837d700(0000) GS:ffff8801dad00000(0000) knlGS:0000000000000000
    CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
    CR2: 00000000004540a0 CR3: 00000001c242e005 CR4: 00000000001626f0
    DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
    DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
    Call Trace:
     [<ffffffff82b5b45e>] __bond_release_one+0x43e/0x500 drivers/net/bonding/bond_main.c:1923
     [<ffffffff82b5b966>] bond_release drivers/net/bonding/bond_main.c:2039 [inline]
     [<ffffffff82b5b966>] bond_do_ioctl+0x416/0x870 drivers/net/bonding/bond_main.c:3562
     [<ffffffff83ae25f4>] dev_ifsioc+0x6f4/0x940 net/core/dev_ioctl.c:328
     [<ffffffff83ae2e58>] dev_ioctl+0x1b8/0xc70 net/core/dev_ioctl.c:495
     [<ffffffff83995ffd>] sock_do_ioctl+0x1bd/0x300 net/socket.c:1088
     [<ffffffff83996a80>] sock_ioctl+0x300/0x5d0 net/socket.c:1196
     [<ffffffff81b124db>] vfs_ioctl fs/ioctl.c:47 [inline]
     [<ffffffff81b124db>] file_ioctl fs/ioctl.c:501 [inline]
     [<ffffffff81b124db>] do_vfs_ioctl+0xacb/0x1300 fs/ioctl.c:688
     [<ffffffff81b12dc6>] SYSC_ioctl fs/ioctl.c:705 [inline]
     [<ffffffff81b12dc6>] SyS_ioctl+0xb6/0xe0 fs/ioctl.c:696
     [<ffffffff8101ccc8>] do_syscall_64+0x528/0x770 arch/x86/entry/common.c:305
     [<ffffffff84400091>] entry_SYSCALL_64_after_hwframe+0x42/0xb7
    
    Fixes: ee637714 ("bonding: Simplify the xmit function for modes that use xmit_hash")
    Signed-off-by: NEric Dumazet <edumazet@google.com>
    Reported-by: Nsyzbot <syzkaller@googlegroups.com>
    Cc: Mahesh Bandewar <maheshb@google.com>
    Signed-off-by: NJakub Kicinski <jakub.kicinski@netronome.com>
    a7137534
bond_main.c 137.1 KB