diff options
author | Bart Van Assche <bart.vanassche@sandisk.com> | 2017-01-23 11:34:45 -0500 |
---|---|---|
committer | Martin K. Petersen <martin.petersen@oracle.com> | 2017-01-24 17:20:31 -0500 |
commit | 27873de99f2fecca0f6b257316489ef2a1d86ffd (patch) | |
tree | 2b027c16a093f251498197be0f50a4fab22d461a | |
parent | 773c7220e22d193e5667c352fcbf8d47eefc817f (diff) |
scsi: qla2xxx: Fix a recently introduced memory leak
qla2x00_probe_one() allocates IRQs before it initializes rsp_q_map so
IRQs must be freed even if rsp_q_map allocation did not occur. This was
detected by kmemleak.
Fixes: 4fa183455988 ("scsi: qla2xxx: Utilize pci_alloc_irq_vectors/pci_free_irq_vectors calls")
Signed-off-by: Bart Van Assche <bart.vanassche@sandisk.com>
Cc: Michael Hernandez <michael.hernandez@cavium.com>
Cc: Himanshu Madhani <himanshu.madhani@cavium.com>
Cc: Christoph Hellwig <hch@lst.de>
Cc: <stable@vger.kernel.org>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Acked-By: Himanshu Madhani <himanshu.madhani@cavium.com>
Reviewed-by: Johannes Thumshirn <jthumshirn@suse.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index 5815403d1d65..3116bf390b06 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -3237,7 +3237,7 @@ qla2x00_free_irqs(scsi_qla_host_t *vha) | |||
3237 | * from a probe failure context. | 3237 | * from a probe failure context. |
3238 | */ | 3238 | */ |
3239 | if (!ha->rsp_q_map || !ha->rsp_q_map[0]) | 3239 | if (!ha->rsp_q_map || !ha->rsp_q_map[0]) |
3240 | return; | 3240 | goto free_irqs; |
3241 | rsp = ha->rsp_q_map[0]; | 3241 | rsp = ha->rsp_q_map[0]; |
3242 | 3242 | ||
3243 | if (ha->flags.msix_enabled) { | 3243 | if (ha->flags.msix_enabled) { |
@@ -3257,6 +3257,7 @@ qla2x00_free_irqs(scsi_qla_host_t *vha) | |||
3257 | free_irq(pci_irq_vector(ha->pdev, 0), rsp); | 3257 | free_irq(pci_irq_vector(ha->pdev, 0), rsp); |
3258 | } | 3258 | } |
3259 | 3259 | ||
3260 | free_irqs: | ||
3260 | pci_free_irq_vectors(ha->pdev); | 3261 | pci_free_irq_vectors(ha->pdev); |
3261 | } | 3262 | } |
3262 | 3263 | ||