• Bart Van Assche's avatar
    RDMA/srpt: Fix a use-after-free · b5605148
    Bart Van Assche authored
    Change the LIO port members inside struct srpt_port from regular members
    into pointers. Allocate the LIO port data structures from inside
    srpt_make_tport() and free these from inside srpt_make_tport(). Keep
    struct srpt_device as long as either an RDMA port or a LIO target port is
    associated with it. This patch decouples the lifetime of struct srpt_port
    (controlled by the RDMA core) and struct srpt_port_id (controlled by LIO).
    This patch fixes the following KASAN complaint:
    
      BUG: KASAN: use-after-free in srpt_enable_tpg+0x31/0x70 [ib_srpt]
      Read of size 8 at addr ffff888141cc34b8 by task check/5093
    
      Call Trace:
       <TASK>
       show_stack+0x4e/0x53
       dump_stack_lvl+0x51/0x66
       print_address_description.constprop.0.cold+0xea/0x41e
       print_report.cold+0x90/0x205
       kasan_report+0xb9/0xf0
       __asan_load8+0x69/0x90
       srpt_enable_tpg+0x31/0x70 [ib_srpt]
       target_fabric_tpg_base_enable_store+0xe2/0x140 [target_core_mod]
       configfs_write_iter+0x18b/0x210
       new_sync_write+0x1f2/0x2f0
       vfs_write+0x3e3/0x540
       ksys_write+0xbb/0x140
       __x64_sys_write+0x42/0x50
       do_syscall_64+0x34/0x80
       entry_SYSCALL_64_after_hwframe+0x46/0xb0
       </TASK>
    
    Link: https://lore.kernel.org/r/20220727193415.1583860-4-bvanassche@acm.orgReported-by: default avatarLi Zhijian <lizhijian@fujitsu.com>
    Tested-by: default avatarLi Zhijian <lizhijian@fujitsu.com>
    Fixes: a42d985b ("ib_srpt: Initial SRP Target merge for v3.3-rc1")
    Signed-off-by: default avatarBart Van Assche <bvanassche@acm.org>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    b5605148
ib_srpt.h 15.4 KB