Description
In the Linux kernel, the following vulnerability has been resolved: scsi: qla2xxx: Reject non-SCSI SRB on status IOCB fast path qla2x00_status_entry() filters out non-TYPE_SRB entries and the SRB_NVME_CMD, SRB_BIDI_CMD and SRB_TM_CMD types, then falls through to a SCSI fast path that assumes the command is an SRB_SCSI_CMD. The first thing on that path, qla_chk_edif_rx_sa_delete_pending(), and the subsequent handling both evaluate GET_CMD_SP(sp), i.e. sp->u.scmd.cmd. The srb u union overlays the SCSI command pointer with other command layouts (bsg_job, iocb_cmd). If firmware delivers an unexpected STATUS_TYPE IOCB for a non-SCSI handle, sp->u.scmd.cmd can read as a non-NULL garbage pointer, bypassing the NULL checks in qla_chk_edif_rx_sa_delete_pending() and at the cp == NULL test, and leading to a wild pointer dereference. Reject any SRB whose type is not SRB_SCSI_CMD before entering the fast path. The outstanding_cmds slot is left untouched so a genuinely non-SCSI command still completes through its proper handler.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
dd30706e73b70d67e88fdaca688db7a3374fd5de to < 9204fb0888374083be74f799049649a17eab4191affecteddd30706e73b70d67e88fdaca688db7a3374fd5de to < b7418198b45b327194b97f856fe8ea8daa91f3fdaffecteddd30706e73b70d67e88fdaca688db7a3374fd5de to < 8f0e31e7a41376abe7d6ca7cbee07fcf9de071e6affecteddd30706e73b70d67e88fdaca688db7a3374fd5de to < e38041b47c29316ba79b645e2ae0b713d216b1dbaffecteddd30706e73b70d67e88fdaca688db7a3374fd5de to < e93aa3c5125d9a4352ac0fa8ba4a7f8f87881805affecteddd30706e73b70d67e88fdaca688db7a3374fd5de to < 29f1f9ad9e354cd0b6e4f6fc75ba09162d6a04d9affecteddd30706e73b70d67e88fdaca688db7a3374fd5de to < 0f41d07d72f2245208c45374ca8d0a1846cad667affected
Linux Linux
Default version status: affected
5.15affected0 to < 5.15unaffected5.15.221 to ≤ 5.15.*unaffected6.1.188 to ≤ 6.1.*unaffected6.6.157 to ≤ 6.6.*unaffected6.12.110 to ≤ 6.12.*unaffected6.18.51 to ≤ 6.18.*unaffected7.2.5 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/9204fb0888374083be74f799049649a17eab4191 ↗
- https://git.kernel.org/stable/c/b7418198b45b327194b97f856fe8ea8daa91f3fd ↗
- https://git.kernel.org/stable/c/8f0e31e7a41376abe7d6ca7cbee07fcf9de071e6 ↗
- https://git.kernel.org/stable/c/e38041b47c29316ba79b645e2ae0b713d216b1db ↗
- https://git.kernel.org/stable/c/e93aa3c5125d9a4352ac0fa8ba4a7f8f87881805 ↗
- https://git.kernel.org/stable/c/29f1f9ad9e354cd0b6e4f6fc75ba09162d6a04d9 ↗
- https://git.kernel.org/stable/c/0f41d07d72f2245208c45374ca8d0a1846cad667 ↗