• Mark Zhang's avatar
    RDMA/cma: Protect bind_list and listen_list while finding matching cm id · 730c8912
    Mark Zhang authored
    The bind_list and listen_list must be accessed under a lock, add the
    missing locking around the access in cm_ib_id_from_event()
    
    In addition add lockdep asserts to make it clearer what the locking
    semantic is here.
    
      general protection fault: 0000 [#1] SMP NOPTI
      CPU: 226 PID: 126135 Comm: kworker/226:1 Tainted: G OE 4.12.14-150.47-default #1 SLE15
      Hardware name: Cray Inc. Windom/Windom, BIOS 0.8.7 01-10-2020
      Workqueue: ib_cm cm_work_handler [ib_cm]
      task: ffff9c5a60a1d2c0 task.stack: ffffc1d91f554000
      RIP: 0010:cma_ib_req_handler+0x3f1/0x11b0 [rdma_cm]
      RSP: 0018:ffffc1d91f557b40 EFLAGS: 00010286
      RAX: deacffffffffff30 RBX: 0000000000000001 RCX: ffff9c2af5bb6000
      RDX: 00000000000000a9 RSI: ffff9c5aa4ed2f10 RDI: ffffc1d91f557b08
      RBP: ffffc1d91f557d90 R08: ffff9c340cc80000 R09: ffff9c2c0f901900
      R10: 0000000000000000 R11: 0000000000000001 R12: deacffffffffff30
      R13: ffff9c5a48aeec00 R14: ffffc1d91f557c30 R15: ffff9c5c2eea3688
      FS: 0000000000000000(0000) GS:ffff9c5c2fa80000(0000) knlGS:0000000000000000
      CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 00002b5cc03fa320 CR3: 0000003f8500a000 CR4: 00000000003406e0
      Call Trace:
      ? rdma_addr_cancel+0xa0/0xa0 [ib_core]
      ? cm_process_work+0x28/0x140 [ib_cm]
      cm_process_work+0x28/0x140 [ib_cm]
      ? cm_get_bth_pkey.isra.44+0x34/0xa0 [ib_cm]
      cm_work_handler+0xa06/0x1a6f [ib_cm]
      ? __switch_to_asm+0x34/0x70
      ? __switch_to_asm+0x34/0x70
      ? __switch_to_asm+0x40/0x70
      ? __switch_to_asm+0x34/0x70
      ? __switch_to_asm+0x40/0x70
      ? __switch_to_asm+0x34/0x70
      ? __switch_to_asm+0x40/0x70
      ? __switch_to+0x7c/0x4b0
      ? __switch_to_asm+0x40/0x70
      ? __switch_to_asm+0x34/0x70
      process_one_work+0x1da/0x400
      worker_thread+0x2b/0x3f0
      ? process_one_work+0x400/0x400
      kthread+0x118/0x140
      ? kthread_create_on_node+0x40/0x40
      ret_from_fork+0x22/0x40
      Code: 00 66 83 f8 02 0f 84 ca 05 00 00 49 8b 84 24 d0 01 00 00 48 85 c0 0f 84 68 07 00 00 48 2d d0 01
      00 00 49 89 c4 0f 84 59 07 00 00 <41> 0f b7 44 24 20 49 8b 77 50 66 83 f8 0a 75 9e 49 8b 7c 24 28
    
    Fixes: 4c21b5bc ("IB/cma: Add net_dev and private data checks to RDMA CM")
    Link: https://lore.kernel.org/r/20200616104304.2426081-1-leon@kernel.orgSigned-off-by: default avatarMark Zhang <markz@mellanox.com>
    Reviewed-by: default avatarMaor Gottlieb <maorg@mellanox.com>
    Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    730c8912
cma.c 128 KB