• Parav Pandit's avatar
    IB/{rxe,core,rdmavt}: Fix kernel crash for reg MR · d9703650
    Parav Pandit authored
    This patch fixes below kernel crash on memory registration for rxe
    and other transport drivers which has dma_ops extension.
    
    IB/core invokes ib_map_sg_attrs() in generic manner with dma attributes
    which is used by mlx5 and mthca adapters.  However in doing so it
    ignored honoring dma_ops extension of software based transports for
    sg map/unmap operation.  This results in calling dma_map_sg_attrs of
    hardware virtual device resulting in crash for null reference.
    
    We extend the core to support sg_map/unmap_attrs and transport drivers
    to implement those dma_ops callback functions.
    
    Verified usign perftest applications.
    
    BUG: unable to handle kernel NULL pointer dereference at           (null)
    IP: [<ffffffff81032a75>] check_addr+0x35/0x60
    ...
    Call Trace:
     [<ffffffff81032b39>] ? nommu_map_sg+0x99/0xd0
     [<ffffffffa02b31c6>] ib_umem_get+0x3d6/0x470 [ib_core]
     [<ffffffffa01cc329>] rxe_mem_init_user+0x49/0x270 [rdma_rxe]
     [<ffffffffa01c793a>] ? rxe_add_index+0xca/0x100 [rdma_rxe]
     [<ffffffffa01c995f>] rxe_reg_user_mr+0x9f/0x130 [rdma_rxe]
     [<ffffffffa00419fe>] ib_uverbs_reg_mr+0x14e/0x2c0 [ib_uverbs]
     [<ffffffffa003d3ab>] ib_uverbs_write+0x15b/0x3b0 [ib_uverbs]
     [<ffffffff811e92a6>] ? mem_cgroup_commit_charge+0x76/0xe0
     [<ffffffff811af0a9>] ? page_add_new_anon_rmap+0x89/0xc0
     [<ffffffff8117e6c9>] ? lru_cache_add_active_or_unevictable+0x39/0xc0
     [<ffffffff811f0da8>] __vfs_write+0x28/0x120
     [<ffffffff811f1239>] ? rw_verify_area+0x49/0xb0
     [<ffffffff811f1492>] vfs_write+0xb2/0x1b0
     [<ffffffff811f27d6>] SyS_write+0x46/0xa0
     [<ffffffff814f7d32>] entry_SYSCALL_64_fastpath+0x1a/0xa4
    Signed-off-by: default avatarParav Pandit <pandit.parav@gmail.com>
    Signed-off-by: default avatarDoug Ledford <dledford@redhat.com>
    d9703650
ib_verbs.h 95.5 KB