• Leon Romanovsky's avatar
    RDMA/uverbs: Fix bad unlock balance in ib_uverbs_close_xrcd · 5c2e1c4f
    Leon Romanovsky authored
    There is no matching lock for this mutex. Git history suggests this is
    just a missed remnant from an earlier version of the function before
    this locking was moved into uverbs_free_xrcd.
    
    Originally this lock was protecting the xrcd_table_delete()
    
    =====================================
    WARNING: bad unlock balance detected!
    4.15.0+ #87 Not tainted
    -------------------------------------
    syzkaller223405/269 is trying to release lock (&uverbs_dev->xrcd_tree_mutex) at:
    [<00000000b8703372>] ib_uverbs_close_xrcd+0x195/0x1f0
    but there are no more locks to release!
    
    other info that might help us debug this:
    1 lock held by syzkaller223405/269:
     #0:  (&uverbs_dev->disassociate_srcu){....}, at: [<000000005af3b960>] ib_uverbs_write+0x265/0xef0
    
    stack backtrace:
    CPU: 0 PID: 269 Comm: syzkaller223405 Not tainted 4.15.0+ #87
    Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5-0-ge51488c-20140602_164612-nilsson.home.kraxel.org 04/01/2014
    Call Trace:
     dump_stack+0xde/0x164
     ? dma_virt_map_sg+0x22c/0x22c
     ? ib_uverbs_write+0x265/0xef0
     ? console_unlock+0x502/0xbd0
     ? ib_uverbs_close_xrcd+0x195/0x1f0
     print_unlock_imbalance_bug+0x131/0x160
     lock_release+0x59d/0x1100
     ? ib_uverbs_close_xrcd+0x195/0x1f0
     ? lock_acquire+0x440/0x440
     ? lock_acquire+0x440/0x440
     __mutex_unlock_slowpath+0x88/0x670
     ? wait_for_completion+0x4c0/0x4c0
     ? rdma_lookup_get_uobject+0x145/0x2f0
     ib_uverbs_close_xrcd+0x195/0x1f0
     ? ib_uverbs_open_xrcd+0xdd0/0xdd0
     ib_uverbs_write+0x7f9/0xef0
     ? cyc2ns_read_end+0x10/0x10
     ? ib_uverbs_open_xrcd+0xdd0/0xdd0
     ? uverbs_devnode+0x110/0x110
     ? cyc2ns_read_end+0x10/0x10
     ? cyc2ns_read_end+0x10/0x10
     ? sched_clock_cpu+0x18/0x200
     __vfs_write+0x10d/0x700
     ? uverbs_devnode+0x110/0x110
     ? kernel_read+0x170/0x170
     ? __fget+0x358/0x5d0
     ? security_file_permission+0x93/0x260
     vfs_write+0x1b0/0x550
     SyS_write+0xc7/0x1a0
     ? SyS_read+0x1a0/0x1a0
     ? trace_hardirqs_on_thunk+0x1a/0x1c
     entry_SYSCALL_64_fastpath+0x1e/0x8b
    RIP: 0033:0x4335c9
    
    Cc: syzkaller <syzkaller@googlegroups.com>
    Cc: <stable@vger.kernel.org> # 4.11
    Fixes: fd3c7904 ("IB/core: Change idr objects to use the new schema")
    Reported-by: default avatarNoa Osherovich <noaos@mellanox.com>
    Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    5c2e1c4f
uverbs_cmd.c 96.9 KB