• M
    nvmet: fix freeing unallocated p2pmem · 3c5b4de4
    Max Gurtovoy 提交于
    stable inclusion
    from stable-5.10.43
    commit c440cd080761b18a52cac20f2a42e5da1e3995af
    bugzilla: 109284
    CVE: NA
    
    --------------------------------
    
    [ Upstream commit bcd9a079 ]
    
    In case p2p device was found but the p2p pool is empty, the nvme target
    is still trying to free the sgl from the p2p pool instead of the
    regular sgl pool and causing a crash (BUG() is called). Instead, assign
    the p2p_dev for the request only if it was allocated from p2p pool.
    
    This is the crash that was caused:
    
    [Sun May 30 19:13:53 2021] ------------[ cut here ]------------
    [Sun May 30 19:13:53 2021] kernel BUG at lib/genalloc.c:518!
    [Sun May 30 19:13:53 2021] invalid opcode: 0000 [#1] SMP PTI
    ...
    [Sun May 30 19:13:53 2021] kernel BUG at lib/genalloc.c:518!
    ...
    [Sun May 30 19:13:53 2021] RIP: 0010:gen_pool_free_owner+0xa8/0xb0
    ...
    [Sun May 30 19:13:53 2021] Call Trace:
    [Sun May 30 19:13:53 2021] ------------[ cut here ]------------
    [Sun May 30 19:13:53 2021]  pci_free_p2pmem+0x2b/0x70
    [Sun May 30 19:13:53 2021]  pci_p2pmem_free_sgl+0x4f/0x80
    [Sun May 30 19:13:53 2021]  nvmet_req_free_sgls+0x1e/0x80 [nvmet]
    [Sun May 30 19:13:53 2021] kernel BUG at lib/genalloc.c:518!
    [Sun May 30 19:13:53 2021]  nvmet_rdma_release_rsp+0x4e/0x1f0 [nvmet_rdma]
    [Sun May 30 19:13:53 2021]  nvmet_rdma_send_done+0x1c/0x60 [nvmet_rdma]
    
    Fixes: c6e3f133 ("nvmet: add metadata support for block devices")
    Reviewed-by: NIsrael Rukshin <israelr@nvidia.com>
    Signed-off-by: NMax Gurtovoy <mgurtovoy@nvidia.com>
    Reviewed-by: NLogan Gunthorpe <logang@deltatee.com>
    Reviewed-by: NChaitanya Kulkarni <chaitanya.kulkarni@wdc.com>
    Signed-off-by: NChristoph Hellwig <hch@lst.de>
    Signed-off-by: NSasha Levin <sashal@kernel.org>
    Signed-off-by: NChen Jun <chenjun102@huawei.com>
    Signed-off-by: NZheng Zengkai <zhengzengkai@huawei.com>
    3c5b4de4
core.c 37.5 KB