Message ID | 20170517220217.28337-1-gpiccoli@linux.vnet.ibm.com (mailing list archive) |
---|---|
State | Accepted, archived |
Headers | show |
Guilherme, > Recent commit on patchset "lpfc updates for 11.2.0.14" fixed an issue > about dereferencing a NULL pointer on port reset. The specific commit, > named "lpfc: Fix system crash when port is reset.", is missing a check > against NULL pointer on lpfc_els_flush_cmd() though. > > Since we destroy the queues on adapter resets, like in PCI error > recovery path, we need the validation present on this patch in order > to avoid a NULL pointer dereference when trying to flush commands of > ELS wq, after it has been destroyed (which would lead to a kernel > oops). Applied to 4.12/scsi-fixes. Thank you!
On 05/17/2017 09:21 PM, Martin K. Petersen wrote: > > Guilherme, > >> Recent commit on patchset "lpfc updates for 11.2.0.14" fixed an issue >> about dereferencing a NULL pointer on port reset. The specific commit, >> named "lpfc: Fix system crash when port is reset.", is missing a check >> against NULL pointer on lpfc_els_flush_cmd() though. >> >> Since we destroy the queues on adapter resets, like in PCI error >> recovery path, we need the validation present on this patch in order >> to avoid a NULL pointer dereference when trying to flush commands of >> ELS wq, after it has been destroyed (which would lead to a kernel >> oops). > > Applied to 4.12/scsi-fixes. Thank you! > Thanks Martin!
diff --git a/drivers/scsi/lpfc/lpfc_els.c b/drivers/scsi/lpfc/lpfc_els.c index 1d36f82fa369..8e532b39ae93 100644 --- a/drivers/scsi/lpfc/lpfc_els.c +++ b/drivers/scsi/lpfc/lpfc_els.c @@ -7451,6 +7451,13 @@ lpfc_els_flush_cmd(struct lpfc_vport *vport) */ spin_lock_irq(&phba->hbalock); pring = lpfc_phba_elsring(phba); + + /* Bail out if we've no ELS wq, like in PCI error recovery case. */ + if (unlikely(!pring)) { + spin_unlock_irq(&phba->hbalock); + return; + } + if (phba->sli_rev == LPFC_SLI_REV4) spin_lock(&pring->ring_lock);