mirror of https://gitee.com/openkylin/linux.git
scsi: qla2xxx: Fix NULL pointer crash due to probe failure
This patch fixes regression added by commitd74595278f
("scsi: qla2xxx: Add multiple queue pair functionality."). When driver is not able to get reqeusted IRQs from the system, driver will attempt tp clean up memory before failing hardware probe. During this cleanup, driver assigns NULL value to the pointer which has not been allocated by driver yet. This results in a NULL pointer access. Log file will show following message and stack trace qla2xxx [0000:a3:00.1]-00c7:21: MSI-X: Failed to enable support, giving up -- 32/-1. qla2xxx [0000:a3:00.1]-0037:21: Falling back-to MSI mode --1. qla2xxx [0000:a3:00.1]-003a:21: Failed to reserve interrupt 821 already in use. BUG: unable to handle kernel NULL pointer dereference at (null) IP: [<ffffffffc010c4b6>] qla2x00_probe_one+0x18b6/0x2730 [qla2xxx] PGD 0 Oops: 0002 [#1] SMP Fixes:d74595278f
("scsi: qla2xxx: Add multiple queue pair functionality."). Cc: <stable@vger.kernel.org> # 4.10 Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
4774bc9dce
commit
d64d6c5671
|
@ -3035,9 +3035,6 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
base_vha = qla2x00_create_host(sht, ha);
|
||||
if (!base_vha) {
|
||||
ret = -ENOMEM;
|
||||
qla2x00_mem_free(ha);
|
||||
qla2x00_free_req_que(ha, req);
|
||||
qla2x00_free_rsp_que(ha, rsp);
|
||||
goto probe_hw_failed;
|
||||
}
|
||||
|
||||
|
@ -3098,7 +3095,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
/* Set up the irqs */
|
||||
ret = qla2x00_request_irqs(ha, rsp);
|
||||
if (ret)
|
||||
goto probe_init_failed;
|
||||
goto probe_hw_failed;
|
||||
|
||||
/* Alloc arrays of request and response ring ptrs */
|
||||
if (!qla2x00_alloc_queues(ha, req, rsp)) {
|
||||
|
@ -3415,6 +3412,9 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id)
|
|||
scsi_host_put(base_vha->host);
|
||||
|
||||
probe_hw_failed:
|
||||
qla2x00_mem_free(ha);
|
||||
qla2x00_free_req_que(ha, req);
|
||||
qla2x00_free_rsp_que(ha, rsp);
|
||||
qla2x00_clear_drv_active(ha);
|
||||
|
||||
iospace_config_failed:
|
||||
|
|
Loading…
Reference in New Issue