scsi: lpfc: nvme: avoid hang / use-after-free when destroying localport
authorEwan D. Milne <emilne@redhat.com>
Thu, 17 Jan 2019 16:14:44 +0000 (11:14 -0500)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 5 Mar 2019 16:58:50 +0000 (17:58 +0100)
commit30b62656690d76bb6a033db9ed88d7bf81180e42
treea1bf423809478c1899b783c393a1cd6ef7e85137
parentedca54b897bb16d2ad7c0549b7bce2e5e2bc36e1
scsi: lpfc: nvme: avoid hang / use-after-free when destroying localport

[ Upstream commit 7961cba6f7d8215fa632df3d220e5154bb825249 ]

We cannot wait on a completion object in the lpfc_nvme_lport structure in
the _destroy_localport() code path because the NVMe/fc transport will free
that structure immediately after the .localport_delete() callback.  This
results in a use-after-free, and a hang if slub_debug=FZPU is enabled.

Fix this by putting the completion on the stack.

Signed-off-by: Ewan D. Milne <emilne@redhat.com>
Acked-by: James Smart <james.smart@broadcom.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/lpfc/lpfc_nvme.c
drivers/scsi/lpfc/lpfc_nvme.h