• Leon Romanovsky's avatar
    RDMA/mlx5: Protect from kernel crash if XRC_TGT doesn't have udata · 6eefa839
    Leon Romanovsky authored
    Don't deref udata if it is NULL
    
      BUG: kernel NULL pointer dereference, address: 0000000000000030
      #PF: supervisor read access in kernel mode
      #PF: error_code(0x0000) - not-present page
      PGD 0 P4D 0
      Oops: 0000   SMP PTI
      CPU: 2 PID: 1592 Comm: python3 Not tainted 5.7.0-rc6+ #1
      Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org 04/01/2014
      RIP: 0010:create_qp+0x39e/0xae0 [mlx5_ib]
      Code: c0 0d 00 00 bf 10 01 00 00 e8 be a9 e4 e0 48 85 c0 49 89 c2 0f 84 0c 07 00 00 41 8b 85 74 63 01 00 0f c8 a9 00 00 00 10 74 0a <41> 8b 46 30 0f c8 41 89 42 14 41 8b 52 18 41 0f b6 4a 1c 0f ca 89
      RSP: 0018:ffffc9000067f8b0 EFLAGS: 00010206
      RAX: 0000000010170000 RBX: ffff888441313000 RCX: 0000000000000000
      RDX: 0000000000000200 RSI: 0000000000000000 RDI: ffff88845b1d4400
      RBP: ffffc9000067fa60 R08: 0000000000000200 R09: ffff88845b1d4200
      R10: ffff88845b1d4200 R11: ffff888441313000 R12: ffffc9000067f950
      R13: ffff88846ac00140 R14: 0000000000000000 R15: ffff88846c2bc000
      FS:  00007faa1a3c0540(0000) GS:ffff88846fd00000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000030 CR3: 0000000446dca003 CR4: 0000000000760ea0
      DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
      DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
      PKRU: 55555554
      Call Trace:
       ? __switch_to_asm+0x40/0x70
       ? __switch_to_asm+0x34/0x70
       mlx5_ib_create_qp+0x897/0xfa0 [mlx5_ib]
       ib_create_qp+0x9e/0x300 [ib_core]
       create_qp+0x92d/0xb20 [ib_uverbs]
       ? ib_uverbs_cq_event_handler+0x30/0x30 [ib_uverbs]
       ? release_resource+0x30/0x30
       ib_uverbs_create_qp+0xc4/0xe0 [ib_uverbs]
       ib_uverbs_handler_UVERBS_METHOD_INVOKE_WRITE+0xc8/0xf0 [ib_uverbs]
       ib_uverbs_run_method+0x223/0x770 [ib_uverbs]
       ? track_pfn_remap+0xa7/0x100
       ? uverbs_disassociate_api+0xd0/0xd0 [ib_uverbs]
       ? remap_pfn_range+0x358/0x490
       ib_uverbs_cmd_verbs.isra.6+0x19b/0x370 [ib_uverbs]
       ? rdma_umap_priv_init+0x82/0xe0 [ib_core]
       ? vm_mmap_pgoff+0xec/0x120
       ib_uverbs_ioctl+0xc0/0x120 [ib_uverbs]
       ksys_ioctl+0x92/0xb0
       __x64_sys_ioctl+0x16/0x20
       do_syscall_64+0x48/0x130
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
    
    Fixes: e383085c ("RDMA/mlx5: Set ECE options during QP create")
    Link: https://lore.kernel.org/r/20200621115959.60126-1-leon@kernel.orgSigned-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    6eefa839
qp.c 147 KB