• Maor Gottlieb's avatar
    RDMA/core: Fix pkey and port assignment in get_new_pps · 801b67f3
    Maor Gottlieb authored
    When port is part of the modify mask, then we should take it from the
    qp_attr and not from the old pps. Same for PKEY. Otherwise there are
    panics in some configurations:
    
      RIP: 0010:get_pkey_idx_qp_list+0x50/0x80 [ib_core]
      Code: c7 18 e8 13 04 30 ef 0f b6 43 06 48 69 c0 b8 00 00 00 48 03 85 a0 04 00 00 48 8b 50 20 48 8d 48 20 48 39 ca 74 1a 0f b7 73 04 <66> 39 72 10 75 08 eb 10 66 39 72 10 74 0a 48 8b 12 48 39 ca 75 f2
      RSP: 0018:ffffafb3480932f0 EFLAGS: 00010203
      RAX: ffff98059ababa10 RBX: ffff980d926e8cc0 RCX: ffff98059ababa30
      RDX: 0000000000000000 RSI: 0000000000000000 RDI: ffff98059ababa28
      RBP: ffff98059b940000 R08: 00000000000310c0 R09: ffff97fe47c07480
      R10: 0000000000000036 R11: 0000000000000200 R12: 0000000000000071
      R13: ffff98059b940000 R14: ffff980d87f948a0 R15: 0000000000000000
      FS:  00007f88deb31740(0000) GS:ffff98059f600000(0000) knlGS:0000000000000000
      CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      CR2: 0000000000000010 CR3: 0000000853e26001 CR4: 00000000001606e0
      Call Trace:
       port_pkey_list_insert+0x3d/0x1b0 [ib_core]
       ? kmem_cache_alloc_trace+0x215/0x220
       ib_security_modify_qp+0x226/0x3a0 [ib_core]
       _ib_modify_qp+0xcf/0x390 [ib_core]
       ipoib_init_qp+0x7f/0x200 [ib_ipoib]
       ? rvt_modify_port+0xd0/0xd0 [rdmavt]
       ? ib_find_pkey+0x99/0xf0 [ib_core]
       ipoib_ib_dev_open_default+0x1a/0x200 [ib_ipoib]
       ipoib_ib_dev_open+0x96/0x130 [ib_ipoib]
       ipoib_open+0x44/0x130 [ib_ipoib]
       __dev_open+0xd1/0x160
       __dev_change_flags+0x1ab/0x1f0
       dev_change_flags+0x23/0x60
       do_setlink+0x328/0xe30
       ? __nla_validate_parse+0x54/0x900
       __rtnl_newlink+0x54e/0x810
       ? __alloc_pages_nodemask+0x17d/0x320
       ? page_fault+0x30/0x50
       ? _cond_resched+0x15/0x30
       ? kmem_cache_alloc_trace+0x1c8/0x220
       rtnl_newlink+0x43/0x60
       rtnetlink_rcv_msg+0x28f/0x350
       ? kmem_cache_alloc+0x1fb/0x200
       ? _cond_resched+0x15/0x30
       ? __kmalloc_node_track_caller+0x24d/0x2d0
       ? rtnl_calcit.isra.31+0x120/0x120
       netlink_rcv_skb+0xcb/0x100
       netlink_unicast+0x1e0/0x340
       netlink_sendmsg+0x317/0x480
       ? __check_object_size+0x48/0x1d0
       sock_sendmsg+0x65/0x80
       ____sys_sendmsg+0x223/0x260
       ? copy_msghdr_from_user+0xdc/0x140
       ___sys_sendmsg+0x7c/0xc0
       ? skb_dequeue+0x57/0x70
       ? __inode_wait_for_writeback+0x75/0xe0
       ? fsnotify_grab_connector+0x45/0x80
       ? __dentry_kill+0x12c/0x180
       __sys_sendmsg+0x58/0xa0
       do_syscall_64+0x5b/0x200
       entry_SYSCALL_64_after_hwframe+0x44/0xa9
      RIP: 0033:0x7f88de467f10
    
    Link: https://lore.kernel.org/r/20200227125728.100551-1-leon@kernel.org
    Cc: <stable@vger.kernel.org>
    Fixes: 1dd01788 ("RDMA/core: Fix protection fault in get_pkey_idx_qp_list")
    Signed-off-by: default avatarMaor Gottlieb <maorg@mellanox.com>
    Signed-off-by: default avatarLeon Romanovsky <leonro@mellanox.com>
    Tested-by: default avatarMike Marciniszyn <mike.marciniszyn@intel.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@mellanox.com>
    801b67f3
security.c 18.3 KB