From: sashiko-bot@kernel.org
To: "Nilesh Javali" <njavali@marvell.com>
Cc: linux-scsi@vger.kernel.org
Subject: Re: [PATCH v6 50/56] scsi: qla2xxx: Hold vport reference in qla24xx_report_id_acquisition()
Date: Thu, 23 Jul 2026 19:12:18 +0000 [thread overview]
Message-ID: <20260723191248.9A57A1F000E9@smtp.kernel.org> (raw)
In-Reply-To: <20260723050413.3897522-51-njavali@marvell.com>
Thank you for your contribution! Sashiko AI review found 5 potential issue(s) to consider:
New issues:
- [High] Missing memory barrier before `atomic_dec(&vp->vref_count)` allows compiler/CPU reordering, reopening the use-after-free window.
Pre-existing issues:
- [High] Missing lock serialization on `host_map` btree in `qla_update_host_map()`.
- [High] Unchecked VPORT_DELETE state in `qla24xx_report_id_acquisition()` allows a dying vport to be re-inserted into the host map btree.
- [High] Unprotected list traversal and access of `vp_fcports` in `qla24xx_report_id_acquisition` (Format 2 path) can lead to Use-After-Free.
- [High] Pre-existing `list_for_each_entry_safe` iteration across lock drops allows the cached next element to be freed.
--
--- Patch [50]: [PATCH v6 50/56] scsi: qla2xxx: Hold vport reference in qla24xx_report_id_acquisition() ---
commit 63a71c77c454d2559780ee0faf9f716b8a83c5f1
Author: Nilesh Javali <njavali@marvell.com>
Subject: scsi: qla2xxx: Hold vport reference in qla24xx_report_id_acquisition()
This commit fixes a use-after-free window in the format 1 path by
taking a vport reference under the vport_slock during id acquisition.
The lock is held while searching the list, and the reference ensures
the vport remains valid during subsequent lockless setup.
Cc: stable@vger.kernel.org
> diff --git a/drivers/scsi/qla2xxx/qla_mbx.c b/drivers/scsi/qla2xxx/qla_mbx.c
> index 59023492c5a98..ba4a4764de1fb 100644
> --- a/drivers/scsi/qla2xxx/qla_mbx.c
> +++ b/drivers/scsi/qla2xxx/qla_mbx.c
> @@ -4267,6 +4267,7 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, void *pkt)
> list_for_each_entry(vp, &ha->vp_list, list) {
> if (vp_idx == vp->vp_idx) {
> found = 1;
> + atomic_inc(&vp->vref_count);
[Severity: High]
This is a pre-existing issue, but does this loop need to check whether
the vport is actively being deleted?
If a concurrent thread removes the vport from the host map and sets the
deletion state, could this loop erroneously take a reference on the dying
vport and re-insert it into the host map below, creating a dangling pointer
once the reference is dropped?
> break;
> }
> }
> @@ -4284,6 +4285,8 @@ qla24xx_report_id_acquisition(scsi_qla_host_t *vha, void *pkt)
> spin_unlock_irqrestore(&ha->vport_slock, flags);
>
> if (!found)
> return;
>
> qla_update_host_map(vp, id);
[Severity: High]
This isn't a bug introduced by this patch, but does dropping the vport_slock
leave qla_update_host_map() unprotected?
The btree functions are used locklessly in this operation. If another thread
modifies the host map concurrently, can this result in data races and btree
corruption?
>
> /*
> * Cannot configure here as we are still sitting on the
> * response queue. Handle it in dpc context.
> */
> set_bit(VP_IDX_ACQUIRED, &vp->vp_flags);
> set_bit(REGISTER_FC4_NEEDED, &vp->dpc_flags);
> set_bit(REGISTER_FDMI_NEEDED, &vp->dpc_flags);
> +
> + atomic_dec(&vp->vref_count);
[Severity: High]
Can this regression allow the compiler or CPU to reorder the set_bit()
operations?
Since void-returning atomic operations like atomic_dec() and set_bit()
do not imply memory barriers, could the CPU reorder the memory stores to
become visible after the reference count is decremented?
If a concurrent thread polls the reference count, observes it drop to zero,
unlinks, and frees the vport, would the delayed set_bit() stores corrupt the
freed memory?
> }
> set_bit(VP_DPC_NEEDED, &vha->dpc_flags);
[ ... ]
[Severity: High]
This is a pre-existing issue, but is the vp_fcports list traversed safely
in the Format 2 path of qla24xx_report_id_acquisition()?
drivers/scsi/qla2xxx/qla_mbx.c:qla24xx_report_id_acquisition() {
...
} else if (rptid_entry->format == 2) {
...
list_for_each_entry(fcport, &vha->vp_fcports, list) {
fcport->scan_state = QLA_FCPORT_SCAN;
fcport->n2n_flag = 0;
}
...
}
Unlike the Format 1 path, this traversal appears to happen without holding
the session lock. If a concurrent session deletion unlinks and frees the
fcport elements during this loop, could this lead to list corruption and a
use-after-free?
[Severity: High]
This is also a pre-existing issue, but does list_for_each_entry_safe()
across a lock drop open a window for the cached next element to be freed?
drivers/scsi/qla2xxx/qla_mid.c:qla2x00_do_dpc_all_vps() {
...
list_for_each_entry_safe(vp, tvp, &ha->vp_list, list) {
if (vp->vp_idx) {
atomic_inc(&vp->vref_count);
spin_unlock_irqrestore(&ha->vport_slock, flags);
qla2x00_do_dpc_vp(vp);
spin_lock_irqsave(&ha->vport_slock, flags);
atomic_dec(&vp->vref_count);
}
}
...
}
Because the macro caches the next element (tvp) before dropping the lock,
could a concurrent removal free tvp while the lock is dropped, causing a
use-after-free when the loop advances?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260723050413.3897522-1-njavali@marvell.com?part=50
next prev parent reply other threads:[~2026-07-23 19:12 UTC|newest]
Thread overview: 96+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-23 5:03 [PATCH v6 00/56] scsi: qla2xxx: Add QLA29xx series adapter support Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 01/56] scsi: qla2xxx: Add 29xx series PCI device ID support Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 02/56] scsi: qla2xxx: Add flash read/write interface for 29xx Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 03/56] scsi: qla2xxx: Add NVRAM config support for 29xx adapters Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 04/56] scsi: qla2xxx: Add 29xx support in queue initialisation path Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 05/56] scsi: qla2xxx: Add FC operational firmware load for 29xx Nilesh Javali
2026-07-23 6:44 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 06/56] scsi: qla2xxx: Remove redundant VPD flash read in sysfs read path Nilesh Javali
2026-07-23 6:53 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 07/56] scsi: qla2xxx: Add flash block read/write BSG support for 29xx Nilesh Javali
2026-07-23 7:11 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 08/56] scsi: qla2xxx: Add BSG MPI firmware load/dump " Nilesh Javali
2026-07-23 7:24 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 09/56] scsi: qla2xxx: Add 128-byte IOCB definitions " Nilesh Javali
2026-07-23 7:35 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 10/56] scsi: qla2xxx: Add extended status continuation and marker IOCBs Nilesh Javali
2026-07-23 7:43 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 11/56] scsi: qla2xxx: Update IO path to use 128-byte IOCBs for 29xx Nilesh Javali
2026-07-23 8:25 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 12/56] scsi: qla2xxx: Skip image-set-valid attribute " Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 13/56] scsi: qla2xxx: Skip unsupported sysfs attributes " Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 14/56] scsi: qla2xxx: Enable get_fw_version mailbox " Nilesh Javali
2026-07-23 9:15 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 15/56] scsi: qla2xxx: Extend execute_fw mailbox to include 29xx Nilesh Javali
2026-07-23 9:26 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 16/56] scsi: qla2xxx: Enable get_adapter_id mailbox for 29xx Nilesh Javali
2026-07-23 9:36 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 17/56] scsi: qla2xxx: Enable init_firmware " Nilesh Javali
2026-07-23 9:45 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 18/56] scsi: qla2xxx: Enable get_firmware_state " Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 19/56] scsi: qla2xxx: Enable serdes, resource count and FCE trace " Nilesh Javali
2026-07-23 10:10 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 20/56] scsi: qla2xxx: Enable set_els_cmds and echo_test " Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 21/56] scsi: qla2xxx: Add support for QLA29XX in data rate functions Nilesh Javali
2026-07-23 10:25 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 22/56] scsi: qla2xxx: Enable qla2x00_shutdown for 29xx Nilesh Javali
2026-07-23 10:34 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 23/56] scsi: qla2xxx: Use ring-slot helpers in __qla2x00_alloc_iocbs Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 24/56] scsi: qla2xxx: Add support for QLA29XX in memory allocation Nilesh Javali
2026-07-23 10:56 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 25/56] scsi: qla2xxx: Handle sts_cont_entry_ext_t for 29xx adapters Nilesh Javali
2026-07-23 11:12 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 26/56] scsi: qla2xxx: Update handling of status entries for 29xx series Nilesh Javali
2026-07-23 13:25 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 27/56] scsi: qla2xxx: Enhance ct_entry_24xx_ext iocb handling " Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 28/56] scsi: qla2xxx: Enhance purex_entry " Nilesh Javali
2026-07-23 14:09 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 29/56] scsi: qla2xxx: Update handling of ELS IOCBs " Nilesh Javali
2026-07-23 14:25 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 30/56] scsi: qla2xxx: Add size check for ELS status entry layout on 29xx Nilesh Javali
2026-07-23 14:39 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 31/56] scsi: qla2xxx: Add 29xx extended logio IOCB support Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 32/56] scsi: qla2xxx: Enhance task management IOCB handling for 29xx series Nilesh Javali
2026-07-23 15:08 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 33/56] scsi: qla2xxx: Add abort command " Nilesh Javali
2026-07-23 15:28 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 34/56] scsi: qla2xxx: Enhance ABTS processing " Nilesh Javali
2026-07-23 15:53 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 35/56] scsi: qla2xxx: Update VP control IOCB handling " Nilesh Javali
2026-07-23 16:12 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 36/56] scsi: qla2xxx: Add build-time size check for VP config IOCB layout Nilesh Javali
2026-07-23 5:03 ` [PATCH v6 37/56] scsi: qla2xxx: Add size check for extended VP report ID entry Nilesh Javali
2026-07-23 16:31 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 38/56] scsi: qla2xxx: Add LS4 pass-through IOCB handling for 29xx series Nilesh Javali
2026-07-23 16:47 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 39/56] scsi: qla2xxx: Adjust feature gating in BSG paths for 29xx support Nilesh Javali
2026-07-23 17:05 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 40/56] scsi: qla2xxx: Fix queue teardown NULL dma_free and bitmap locking Nilesh Javali
2026-07-23 17:16 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 41/56] scsi: qla2xxx: Replace __le16 bitfields with scalar and accessors Nilesh Javali
2026-07-23 17:29 ` sashiko-bot
2026-07-23 5:03 ` [PATCH v6 42/56] scsi: qla2xxx: Fix endianness annotations in vp_rpt_id_entry structures Nilesh Javali
2026-07-23 5:04 ` [PATCH v6 43/56] scsi: qla2xxx: Use 64-bit FPM word counters for 29xx host stats Nilesh Javali
2026-07-23 5:04 ` [PATCH v6 44/56] scsi: qla2xxx: Add 64G/128G port speed setting support Nilesh Javali
2026-07-23 18:07 ` sashiko-bot
2026-07-23 5:04 ` [PATCH v6 45/56] scsi: qla2xxx: Fix 64G link speed reporting in get_data_rate Nilesh Javali
2026-07-23 18:17 ` sashiko-bot
2026-07-23 5:04 ` [PATCH v6 46/56] scsi: qla2xxx: edif: Fix NULL pointer deref in RX SA delete check Nilesh Javali
2026-07-23 5:04 ` [PATCH v6 47/56] scsi: qla2xxx: Fix Name Server logout detection on FWI2 adapters Nilesh Javali
2026-07-23 5:04 ` [PATCH v6 48/56] scsi: qla2xxx: Bound VP index against VP_CTRL IOCB bitmap size Nilesh Javali
2026-07-23 5:04 ` [PATCH v6 49/56] scsi: qla2xxx: Check entry_status in qla24xx_modify_vp_config() Nilesh Javali
2026-07-23 18:56 ` sashiko-bot
2026-07-23 5:04 ` [PATCH v6 50/56] scsi: qla2xxx: Hold vport reference in qla24xx_report_id_acquisition() Nilesh Javali
2026-07-23 19:12 ` sashiko-bot [this message]
2026-07-23 5:04 ` [PATCH v6 51/56] scsi: qla2xxx: Initialize NVMe abort_work once at submission Nilesh Javali
2026-07-23 19:26 ` sashiko-bot
2026-07-23 5:04 ` [PATCH v6 52/56] scsi: qla2xxx: Hold qpair lock when sending NVMe LS reject Nilesh Javali
2026-07-23 19:36 ` sashiko-bot
2026-07-23 5:04 ` [PATCH v6 53/56] scsi: qla2xxx: Zero dport diagnostics buffer to avoid info leak Nilesh Javali
2026-07-23 19:49 ` sashiko-bot
2026-07-23 5:04 ` [PATCH v6 54/56] scsi: qla2xxx: Fix BSG job leak on validate flash image error path Nilesh Javali
2026-07-23 20:05 ` sashiko-bot
2026-07-23 5:04 ` [PATCH v6 55/56] scsi: qla2xxx: Bound image count in qla2x00_update_fru_versions() Nilesh Javali
2026-07-23 20:16 ` sashiko-bot
2026-07-23 5:04 ` [PATCH v6 56/56] scsi: qla2xxx: Update version to 12.00.00.2607b1 Nilesh Javali
2026-07-23 20:27 ` sashiko-bot
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260723191248.9A57A1F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=linux-scsi@vger.kernel.org \
--cc=njavali@marvell.com \
--cc=sashiko-reviews@lists.linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox