From 4c10072cda3c1205cab71bac0f645bc090dfc456 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 16 Feb 2026 10:38:29 +0100 Subject: [PATCH] 6.19-stable patches added patches: scsi-qla2xxx-fix-bsg_done-causing-double-free.patch series --- ...xxx-fix-bsg_done-causing-double-free.patch | 132 ++++++++++++++++++ queue-6.19/series | 1 + 2 files changed, 133 insertions(+) create mode 100644 queue-6.19/scsi-qla2xxx-fix-bsg_done-causing-double-free.patch create mode 100644 queue-6.19/series diff --git a/queue-6.19/scsi-qla2xxx-fix-bsg_done-causing-double-free.patch b/queue-6.19/scsi-qla2xxx-fix-bsg_done-causing-double-free.patch new file mode 100644 index 0000000000..391f962a9e --- /dev/null +++ b/queue-6.19/scsi-qla2xxx-fix-bsg_done-causing-double-free.patch @@ -0,0 +1,132 @@ +From c2c68225b1456f4d0d393b5a8778d51bb0d5b1d0 Mon Sep 17 00:00:00 2001 +From: Anil Gurumurthy +Date: Wed, 10 Dec 2025 15:46:03 +0530 +Subject: scsi: qla2xxx: Fix bsg_done() causing double free + +From: Anil Gurumurthy + +commit c2c68225b1456f4d0d393b5a8778d51bb0d5b1d0 upstream. + +Kernel panic observed on system, + +[5353358.825191] BUG: unable to handle page fault for address: ff5f5e897b024000 +[5353358.825194] #PF: supervisor write access in kernel mode +[5353358.825195] #PF: error_code(0x0002) - not-present page +[5353358.825196] PGD 100006067 P4D 0 +[5353358.825198] Oops: 0002 [#1] PREEMPT SMP NOPTI +[5353358.825200] CPU: 5 PID: 2132085 Comm: qlafwupdate.sub Kdump: loaded Tainted: G W L ------- --- 5.14.0-503.34.1.el9_5.x86_64 #1 +[5353358.825203] Hardware name: HPE ProLiant DL360 Gen11/ProLiant DL360 Gen11, BIOS 2.44 01/17/2025 +[5353358.825204] RIP: 0010:memcpy_erms+0x6/0x10 +[5353358.825211] RSP: 0018:ff591da8f4f6b710 EFLAGS: 00010246 +[5353358.825212] RAX: ff5f5e897b024000 RBX: 0000000000007090 RCX: 0000000000001000 +[5353358.825213] RDX: 0000000000001000 RSI: ff591da8f4fed090 RDI: ff5f5e897b024000 +[5353358.825214] RBP: 0000000000010000 R08: ff5f5e897b024000 R09: 0000000000000000 +[5353358.825215] R10: ff46cf8c40517000 R11: 0000000000000001 R12: 0000000000008090 +[5353358.825216] R13: ff591da8f4f6b720 R14: 0000000000001000 R15: 0000000000000000 +[5353358.825218] FS: 00007f1e88d47740(0000) GS:ff46cf935f940000(0000) knlGS:0000000000000000 +[5353358.825219] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 +[5353358.825220] CR2: ff5f5e897b024000 CR3: 0000000231532004 CR4: 0000000000771ef0 +[5353358.825221] PKRU: 55555554 +[5353358.825222] Call Trace: +[5353358.825223] +[5353358.825224] ? show_trace_log_lvl+0x1c4/0x2df +[5353358.825229] ? show_trace_log_lvl+0x1c4/0x2df +[5353358.825232] ? sg_copy_buffer+0xc8/0x110 +[5353358.825236] ? __die_body.cold+0x8/0xd +[5353358.825238] ? page_fault_oops+0x134/0x170 +[5353358.825242] ? kernelmode_fixup_or_oops+0x84/0x110 +[5353358.825244] ? exc_page_fault+0xa8/0x150 +[5353358.825247] ? asm_exc_page_fault+0x22/0x30 +[5353358.825252] ? memcpy_erms+0x6/0x10 +[5353358.825253] sg_copy_buffer+0xc8/0x110 +[5353358.825259] qla2x00_process_vendor_specific+0x652/0x1320 [qla2xxx] +[5353358.825317] qla24xx_bsg_request+0x1b2/0x2d0 [qla2xxx] + +Most routines in qla_bsg.c call bsg_done() only for success cases. +However a few invoke it for failure case as well leading to a double +free. Validate before calling bsg_done(). + +Cc: stable@vger.kernel.org +Signed-off-by: Anil Gurumurthy +Signed-off-by: Nilesh Javali +Reviewed-by: Himanshu Madhani +Link: https://patch.msgid.link/20251210101604.431868-12-njavali@marvell.com +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +Signed-off-by: Greg Kroah-Hartman +--- + drivers/scsi/qla2xxx/qla_bsg.c | 28 +++++++++++++++++----------- + 1 file changed, 17 insertions(+), 11 deletions(-) + +--- a/drivers/scsi/qla2xxx/qla_bsg.c ++++ b/drivers/scsi/qla2xxx/qla_bsg.c +@@ -1546,8 +1546,9 @@ qla2x00_update_optrom(struct bsg_job *bs + ha->optrom_buffer = NULL; + ha->optrom_state = QLA_SWAITING; + mutex_unlock(&ha->optrom_mutex); +- bsg_job_done(bsg_job, bsg_reply->result, +- bsg_reply->reply_payload_rcv_len); ++ if (!rval) ++ bsg_job_done(bsg_job, bsg_reply->result, ++ bsg_reply->reply_payload_rcv_len); + return rval; + } + +@@ -2612,8 +2613,9 @@ qla2x00_manage_host_stats(struct bsg_job + sizeof(struct ql_vnd_mng_host_stats_resp)); + + bsg_reply->result = DID_OK; +- bsg_job_done(bsg_job, bsg_reply->result, +- bsg_reply->reply_payload_rcv_len); ++ if (!ret) ++ bsg_job_done(bsg_job, bsg_reply->result, ++ bsg_reply->reply_payload_rcv_len); + + return ret; + } +@@ -2702,8 +2704,9 @@ qla2x00_get_host_stats(struct bsg_job *b + bsg_job->reply_payload.sg_cnt, + data, response_len); + bsg_reply->result = DID_OK; +- bsg_job_done(bsg_job, bsg_reply->result, +- bsg_reply->reply_payload_rcv_len); ++ if (!ret) ++ bsg_job_done(bsg_job, bsg_reply->result, ++ bsg_reply->reply_payload_rcv_len); + + kfree(data); + host_stat_out: +@@ -2802,8 +2805,9 @@ reply: + bsg_job->reply_payload.sg_cnt, data, + response_len); + bsg_reply->result = DID_OK; +- bsg_job_done(bsg_job, bsg_reply->result, +- bsg_reply->reply_payload_rcv_len); ++ if (!ret) ++ bsg_job_done(bsg_job, bsg_reply->result, ++ bsg_reply->reply_payload_rcv_len); + + tgt_stat_out: + kfree(data); +@@ -2864,8 +2868,9 @@ qla2x00_manage_host_port(struct bsg_job + bsg_job->reply_payload.sg_cnt, &rsp_data, + sizeof(struct ql_vnd_mng_host_port_resp)); + bsg_reply->result = DID_OK; +- bsg_job_done(bsg_job, bsg_reply->result, +- bsg_reply->reply_payload_rcv_len); ++ if (!ret) ++ bsg_job_done(bsg_job, bsg_reply->result, ++ bsg_reply->reply_payload_rcv_len); + + return ret; + } +@@ -3240,7 +3245,8 @@ int qla2x00_mailbox_passthru(struct bsg_ + + bsg_job->reply_len = sizeof(*bsg_job->reply); + bsg_reply->result = DID_OK << 16; +- bsg_job_done(bsg_job, bsg_reply->result, bsg_reply->reply_payload_rcv_len); ++ if (!ret) ++ bsg_job_done(bsg_job, bsg_reply->result, bsg_reply->reply_payload_rcv_len); + + kfree(req_data); + diff --git a/queue-6.19/series b/queue-6.19/series new file mode 100644 index 0000000000..40eb4524d6 --- /dev/null +++ b/queue-6.19/series @@ -0,0 +1 @@ +scsi-qla2xxx-fix-bsg_done-causing-double-free.patch -- 2.47.3