]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
scsi: qla2xxx: Fix improper freeing of purex item
authorZilin Guan <zilin@seu.edu.cn>
Thu, 13 Nov 2025 15:12:46 +0000 (15:12 +0000)
committerMartin K. Petersen <martin.petersen@oracle.com>
Thu, 20 Nov 2025 03:38:27 +0000 (22:38 -0500)
In qla2xxx_process_purls_iocb(), an item is allocated via
qla27xx_copy_multiple_pkt(), which internally calls
qla24xx_alloc_purex_item().

The qla24xx_alloc_purex_item() function may return a pre-allocated item
from a per-adapter pool for small allocations, instead of dynamically
allocating memory with kzalloc().

An error handling path in qla2xxx_process_purls_iocb() incorrectly uses
kfree() to release the item. If the item was from the pre-allocated
pool, calling kfree() on it is a bug that can lead to memory corruption.

Fix this by using the correct deallocation function,
qla24xx_free_purex_item(), which properly handles both dynamically
allocated and pre-allocated items.

Fixes: 875386b98857 ("scsi: qla2xxx: Add Unsolicited LS Request and Response Support for NVMe")
Signed-off-by: Zilin Guan <zilin@seu.edu.cn>
Reviewed-by: Himanshu Madhani <hmadhani2024@gmail.com>
Link: https://patch.msgid.link/20251113151246.762510-1-zilin@seu.edu.cn
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_nvme.c

index 316594aa40cc5a9c70a6799fb1b1d36af116ccb4..42eb65a62f1f3c93d1036b68919a82dcb5dde4d0 100644 (file)
@@ -1292,7 +1292,7 @@ void qla2xxx_process_purls_iocb(void **pkt, struct rsp_que **rsp)
                a.reason = FCNVME_RJT_RC_LOGIC;
                a.explanation = FCNVME_RJT_EXP_NONE;
                xmt_reject = true;
-               kfree(item);
+               qla24xx_free_purex_item(item);
                goto out;
        }