mirror of https://gitee.com/openkylin/linux.git
scsi: lpfc: Fix memory leak on lpfc_bsg_write_ebuf_set func
When phba->mbox_ext_buf_ctx.seqNum != phba->mbox_ext_buf_ctx.numBuf, dd_data should be freed before return SLI_CONFIG_HANDLED. When lpfc_sli_issue_mbox func return fails, pmboxq should be also freed in job_error tag. Link: https://lore.kernel.org/r/EDBAAA0BBBA2AC4E9C8B6B81DEEE1D6915E7A966@DGGEML525-MBS.china.huawei.com Signed-off-by: Bo Wu <wubo40@huawei.com> Reviewed-by: Zhiqiang Liu <liuzhiqiang26@huawei.com> Reviewed-by: James Smart <james.smart@broadcom.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
c868907e1a
commit
9a1b0b9a6d
|
@ -4489,12 +4489,6 @@ lpfc_bsg_write_ebuf_set(struct lpfc_hba *phba, struct bsg_job *job,
|
|||
phba->mbox_ext_buf_ctx.seqNum++;
|
||||
nemb_tp = phba->mbox_ext_buf_ctx.nembType;
|
||||
|
||||
dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
|
||||
if (!dd_data) {
|
||||
rc = -ENOMEM;
|
||||
goto job_error;
|
||||
}
|
||||
|
||||
pbuf = (uint8_t *)dmabuf->virt;
|
||||
size = job->request_payload.payload_len;
|
||||
sg_copy_to_buffer(job->request_payload.sg_list,
|
||||
|
@ -4531,6 +4525,13 @@ lpfc_bsg_write_ebuf_set(struct lpfc_hba *phba, struct bsg_job *job,
|
|||
"2968 SLI_CONFIG ext-buffer wr all %d "
|
||||
"ebuffers received\n",
|
||||
phba->mbox_ext_buf_ctx.numBuf);
|
||||
|
||||
dd_data = kmalloc(sizeof(struct bsg_job_data), GFP_KERNEL);
|
||||
if (!dd_data) {
|
||||
rc = -ENOMEM;
|
||||
goto job_error;
|
||||
}
|
||||
|
||||
/* mailbox command structure for base driver */
|
||||
pmboxq = mempool_alloc(phba->mbox_mem_pool, GFP_KERNEL);
|
||||
if (!pmboxq) {
|
||||
|
@ -4579,6 +4580,8 @@ lpfc_bsg_write_ebuf_set(struct lpfc_hba *phba, struct bsg_job *job,
|
|||
return SLI_CONFIG_HANDLED;
|
||||
|
||||
job_error:
|
||||
if (pmboxq)
|
||||
mempool_free(pmboxq, phba->mbox_mem_pool);
|
||||
lpfc_bsg_dma_page_free(phba, dmabuf);
|
||||
kfree(dd_data);
|
||||
|
||||
|
|
Loading…
Reference in New Issue