OSDN Git Service

scsi: qla2xxx: Fix double scsi_done for abort path
authorQuinn Tran <qutran@marvell.com>
Tue, 5 Nov 2019 15:06:54 +0000 (07:06 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Sat, 9 Nov 2019 02:15:42 +0000 (21:15 -0500)
commitf45bca8c5052e8c59bab64ee90c44441678b9a52
tree4bf3e5389eddd240e91a9625cd17f1f8e1478532
parentdd322b7f3efc8cda085bb60eadc4aee6324eadd8
scsi: qla2xxx: Fix double scsi_done for abort path

Current code assumes abort will remove the original command from the active
list where scsi_done will not be called. Instead, the eh_abort thread will
do the scsi_done. That is not the case.  Instead, we have a double
scsi_done calls triggering use after free.

Abort will tell FW to release the command from FW possesion. The original
command will return to ULP with error in its normal fashion via scsi_done.
eh_abort path would wait for the original command completion before
returning.  eh_abort path will not perform the scsi_done call.

Fixes: 219d27d7147e0 ("scsi: qla2xxx: Fix race conditions in the code for aborting SCSI commands")
Cc: stable@vger.kernel.org # 5.2
Link: https://lore.kernel.org/r/20191105150657.8092-6-hmadhani@marvell.com
Reviewed-by: Ewan D. Milne <emilne@redhat.com>
Signed-off-by: Quinn Tran <qutran@marvell.com>
Signed-off-by: Arun Easi <aeasi@marvell.com>
Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_def.h
drivers/scsi/qla2xxx/qla_isr.c
drivers/scsi/qla2xxx/qla_nvme.c
drivers/scsi/qla2xxx/qla_os.c