In the Linux kernel, the following vulnerability has been resolved:
scsi: qla2xxx: Hold vport_slock for host map update in report ID acquisition
qla24xx_report_id_acquisition() format-1 handling drops vport_slock after
taking the vport reference and then calls qla_update_host_map() without
the lock. That reaches qla_update_vp_map(), which mutates the ha->host_map
btree via btree_insert32()/btree_update32()/btree_remove32() and is
documented to require vport_slock to be held by the caller. Running it
unlocked can race concurrent host_map updates and corrupt the btree.
The format-2 path in the same function already wraps its host_map update
(SET_AL_PA) in vport_slock; the format-1 path is the lone outlier.
Hold vport_slock across the format-1 qla_update_host_map() call to honor
the documented locking contract. The vref_count taken in the loop keeps
the vport valid, so this only adds the missing host_map serialization.
CVSS Vector: CVSS:3.1/AV:A/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
CVSS Score: 8.8
AV:A - qla24xx_report_id_acquisition() runs from qla2xxx response and ATIO interrupt paths when firmware reports NPIV N_Port ID acquisition or VP_STAT_ID_CHG after fabric FDISC. A peer or switch on the same Fibre Channel SAN can drive those events; FC is a non-routable fabric, so Adjacent is the highest defensible vector.
AC:L - A fabric attacker can bounce the link or induce ID changes so multiple NPIV ports re-acquire IDs while the ATIO MSI-X path (atio_lock) and the response-queue path both call qla_update_host_map() on the shared ha->host_map btree. The attacker drives both sides of that race and can retry at fabric-event rate.
PR:N - Report-ID IOCBs are firmware completions of unauthenticated Fibre Channel fabric login and ID assignment. The path checks no Linux credentials or capabilities on the victim host; FC-SP/EDIF is opt-in and not required.
UI:N - Host-map updates run automatically in interrupt context when the HBA logs NPIV ports into the fabric or the fabric changes a VP ID. No user or administrator action such as mounting a device is required.
S:U - Concurrent btree mutation corrupts qla2xxx host-map and kernel heap state inside the same host kernel security authority. This is not a VM escape, IOMMU bypass, or other cross-boundary impact.
C:H - Unlocked btree_insert32/update32/remove32 on ha->host_map can free or reuse btree nodes while another CPU walks them, and the tree stores scsi_qla_host pointers consumed by qla_find_host_by_d_id(). That is UAF-class heap corruption enabling kernel memory disclosure.
I:H - The same unlocked btree mutation can corrupt node pointers, double-free mempool objects via btree_shrink(), and install attacker-influenced scsi_qla_host pointers used to dispatch incoming FCP/ATIO commands, yielding write and control-flow primitives.
A:H - lib/btree.c BUG_ON()s on inconsistent nodes, and a corrupted host_map causes oopses in interrupt context when ATIO or response processing dereferences a bad vha pointer, panicking the storage host.
| Attack Vector |
Adjacent Network |
Scope |
Unchanged |
| Attack Complexity |
Low |
Confidentiality Impact |
High |
| Privileges Required |
None |
Integrity Impact |
High |
| User Interaction |
None |
Availability Impact |
High |
AV:A - qla24xx_report_id_acquisition() runs from qla2xxx response and ATIO interrupt paths when firmware reports NPIV N_Port ID acquisition or VP_STAT_ID_CHG after fabric FDISC. A peer or switch on the same Fibre Channel SAN can drive those events; FC is a non-routable fabric, so Adjacent is the highest defensible vector.
AC:L - A fabric attacker can bounce the link or induce ID changes so multiple NPIV ports re-acquire IDs while the ATIO MSI-X path (atio_lock) and the response-queue path both call qla_update_host_map() on the shared ha->host_map btree. The attacker drives both sides of that race and can retry at fabric-event rate.
PR:N - Report-ID IOCBs are firmware completions of unauthenticated Fibre Channel fabric login and ID assignment. The path checks no Linux credentials or capabilities on the victim host; FC-SP/EDIF is opt-in and not required.
UI:N - Host-map updates run automatically in interrupt context when the HBA logs NPIV ports into the fabric or the fabric changes a VP ID. No user or administrator action such as mounting a device is required.
S:U - Concurrent btree mutation corrupts qla2xxx host-map and kernel heap state inside the same host kernel security authority. This is not a VM escape, IOMMU bypass, or other cross-boundary impact.
C:H - Unlocked btree_insert32/update32/remove32 on ha->host_map can free or reuse btree nodes while another CPU walks them, and the tree stores scsi_qla_host pointers consumed by qla_find_host_by_d_id(). That is UAF-class heap corruption enabling kernel memory disclosure.
I:H - The same unlocked btree mutation can corrupt node pointers, double-free mempool objects via btree_shrink(), and install attacker-influenced scsi_qla_host pointers used to dispatch incoming FCP/ATIO commands, yielding write and control-flow primitives.
A:H - lib/btree.c BUG_ON()s on inconsistent nodes, and a corrupted host_map causes oopses in interrupt context when ATIO or response processing dereferences a bad vha pointer, panicking the storage host.
CVSS 3.1