From 68fdfc66838f6bdb12ee02df70984f23282c5bd0 Mon Sep 17 00:00:00 2001 From: Daniel Wagner Date: Mar 28 2024 14:28:07 +0000 Subject: scsi: qla2xxx: Fix double free of fcport (bsc#1221816). --- diff --git a/patches.suse/scsi-qla2xxx-Fix-double-free-of-fcport.patch b/patches.suse/scsi-qla2xxx-Fix-double-free-of-fcport.patch new file mode 100644 index 0000000..96387fe --- /dev/null +++ b/patches.suse/scsi-qla2xxx-Fix-double-free-of-fcport.patch @@ -0,0 +1,78 @@ +From: Saurav Kashyap +Date: Tue, 27 Feb 2024 22:11:24 +0530 +Subject: scsi: qla2xxx: Fix double free of fcport +Patch-mainline: Queued in subsystem maintainer repository +Git-repo: git://git.kernel.org/pub/scm/linux/kernel/git/mkp/scsi.git +Git-commit: 82f522ae0d97119a43da53e0f729275691b9c525 +References: bsc#1221816 + +The server was crashing after LOGO because fcport was getting freed twice. + + -----------[ cut here ]----------- + kernel BUG at mm/slub.c:371! + invalid opcode: 0000 1 SMP PTI + CPU: 35 PID: 4610 Comm: bash Kdump: loaded Tainted: G OE --------- - - 4.18.0-425.3.1.el8.x86_64 #1 + Hardware name: HPE ProLiant DL360 Gen10/ProLiant DL360 Gen10, BIOS U32 09/03/2021 + RIP: 0010:set_freepointer.part.57+0x0/0x10 + RSP: 0018:ffffb07107027d90 EFLAGS: 00010246 + RAX: ffff9cb7e3150000 RBX: ffff9cb7e332b9c0 RCX: ffff9cb7e3150400 + RDX: 0000000000001f37 RSI: 0000000000000000 RDI: ffff9cb7c0005500 + RBP: fffff693448c5400 R08: 0000000080000000 R09: 0000000000000009 + R10: 0000000000000000 R11: 0000000000132af0 R12: ffff9cb7c0005500 + R13: ffff9cb7e3150000 R14: ffffffffc06990e0 R15: ffff9cb7ea85ea58 + FS: 00007ff6b79c2740(0000) GS:ffff9cb8f7ec0000(0000) knlGS:0000000000000000 + CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 + CR2: 000055b426b7d700 CR3: 0000000169c18002 CR4: 00000000007706e0 + DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 + DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 + PKRU: 55555554 + Call Trace: + kfree+0x238/0x250 + qla2x00_els_dcmd_sp_free+0x20/0x230 [qla2xxx] + ? qla24xx_els_dcmd_iocb+0x607/0x690 [qla2xxx] + qla2x00_issue_logo+0x28c/0x2a0 [qla2xxx] + ? qla2x00_issue_logo+0x28c/0x2a0 [qla2xxx] + ? kernfs_fop_write+0x11e/0x1a0 + +Remove one of the free calls and add check for valid fcport. Also use +function qla2x00_free_fcport() instead of kfree(). + +Cc: stable@vger.kernel.org +Signed-off-by: Saurav Kashyap +Signed-off-by: Nilesh Javali +Link: https://lore.kernel.org/r/20240227164127.36465-9-njavali@marvell.com +Reviewed-by: Himanshu Madhani +Signed-off-by: Martin K. Petersen +Acked-by: Daniel Wagner +--- + drivers/scsi/qla2xxx/qla_iocb.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +--- a/drivers/scsi/qla2xxx/qla_iocb.c ++++ b/drivers/scsi/qla2xxx/qla_iocb.c +@@ -2637,7 +2637,8 @@ static void qla2x00_els_dcmd_sp_free(srb + { + struct srb_iocb *elsio = &sp->u.iocb_cmd; + +- kfree(sp->fcport); ++ if (sp->fcport) ++ qla2x00_free_fcport(sp->fcport); + + if (elsio->u.els_logo.els_logo_pyld) + dma_free_coherent(&sp->vha->hw->pdev->dev, DMA_POOL_SIZE, +@@ -2750,6 +2751,7 @@ qla24xx_els_dcmd_iocb(scsi_qla_host_t *v + if (!elsio->u.els_logo.els_logo_pyld) { + /* ref: INIT */ + kref_put(&sp->cmd_kref, qla2x00_sp_release); ++ qla2x00_free_fcport(fcport); + return QLA_FUNCTION_FAILED; + } + +@@ -2784,7 +2786,6 @@ qla24xx_els_dcmd_iocb(scsi_qla_host_t *v + fcport->d_id.b.area, fcport->d_id.b.al_pa); + + wait_for_completion(&elsio->u.els_logo.comp); +- qla2x00_free_fcport(fcport); + + /* ref: INIT */ + kref_put(&sp->cmd_kref, qla2x00_sp_release); diff --git a/series.conf b/series.conf index 30fa26a..013f537 100644 --- a/series.conf +++ b/series.conf @@ -20062,6 +20062,7 @@ patches.suse/scsi-qla2xxx-NVME-FCP-prefer-flag-not-being-honored.patch patches.suse/scsi-qla2xxx-Fix-command-flush-on-cable-pull.patch patches.suse/scsi-qla2xxx-Fix-double-free-of-the-ha-vp_map-pointe.patch + patches.suse/scsi-qla2xxx-Fix-double-free-of-fcport.patch ######################################################## # end of sorted patches