• Leon Romanovsky's avatar
    RDMA/ucma: Protect mc during concurrent multicast leaves · 36e8169e
    Leon Romanovsky authored
    Partially revert the commit mentioned in the Fixes line to make sure that
    allocation and erasing multicast struct are locked.
    
      BUG: KASAN: use-after-free in ucma_cleanup_multicast drivers/infiniband/core/ucma.c:491 [inline]
      BUG: KASAN: use-after-free in ucma_destroy_private_ctx+0x914/0xb70 drivers/infiniband/core/ucma.c:579
      Read of size 8 at addr ffff88801bb74b00 by task syz-executor.1/25529
      CPU: 0 PID: 25529 Comm: syz-executor.1 Not tainted 5.16.0-rc7-syzkaller #0
      Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
      Call Trace:
       __dump_stack lib/dump_stack.c:88 [inline]
       dump_stack_lvl+0xcd/0x134 lib/dump_stack.c:106
       print_address_description.constprop.0.cold+0x8d/0x320 mm/kasan/report.c:247
       __kasan_report mm/kasan/report.c:433 [inline]
       kasan_report.cold+0x83/0xdf mm/kasan/report.c:450
       ucma_cleanup_multicast drivers/infiniband/core/ucma.c:491 [inline]
       ucma_destroy_private_ctx+0x914/0xb70 drivers/infiniband/core/ucma.c:579
       ucma_destroy_id+0x1e6/0x280 drivers/infiniband/core/ucma.c:614
       ucma_write+0x25c/0x350 drivers/infiniband/core/ucma.c:1732
       vfs_write+0x28e/0xae0 fs/read_write.c:588
       ksys_write+0x1ee/0x250 fs/read_write.c:643
       do_syscall_x64 arch/x86/entry/common.c:50 [inline]
       do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80
       entry_SYSCALL_64_after_hwframe+0x44/0xae
    
    Currently the xarray search can touch a concurrently freeing mc as the
    xa_for_each() is not surrounded by any lock. Rather than hold the lock for
    a full scan hold it only for the effected items, which is usually an empty
    list.
    
    Fixes: 95fe5109 ("RDMA/ucma: Remove mc_list and rely on xarray")
    Link: https://lore.kernel.org/r/1cda5fabb1081e8d16e39a48d3a4f8160cea88b8.1642491047.git.leonro@nvidia.com
    Reported-by: syzbot+e3f96c43d19782dd14a7@syzkaller.appspotmail.com
    Suggested-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: default avatarMaor Gottlieb <maorg@nvidia.com>
    Signed-off-by: default avatarLeon Romanovsky <leonro@nvidia.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    36e8169e
ucma.c 46.9 KB