Linux: scsi: qla2xxx: Validate BSG request_len before reading vendor_cmd[]
What fixes it
- 5f33efe04658968b6b3f432f904d5f1f74c12286LinuxCVE List
- 740f3458a4798af54aaf8cf63e797d407e8b6d3bLinuxCVE List
- 4cf38dd9465736141263ebb63375868311a0ec81LinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
scsi: qla2xxx: Validate BSG request_len before reading vendor_cmd[]
The FC BSG transport allocates job->request via memdup_user() using the exact user-supplied request_len. For FC_BSG_HST_VENDOR, fc_bsg_host_dispatch() only guarantees request_len covers msgcode and vendor_id; it does not account for the vendor_cmd[] flexible array.
qla2xxx then reads the command selector vendor_cmd[0] and, in several sub-handlers, vendor_cmd[1]/[2] or structures overlaid on the vendor command area without verifying request_len. A caller holding CAP_SYS_RAWIO can submit a short request whose vendor_id matches the host, triggering out-of-bounds heap reads (KASAN-detectable, and able to mis-select a command or panic).
Add a central guard in qla2x00_process_vendor_specific() so the selector is always in bounds, restrict the early vendor_cmd[0] read in qla24xx_bsg_request() to sufficiently long vendor messages, and add request_len checks to the sub-handlers that read further: qla24xx_proc_fcp_prio_cfg_cmd(), qla2x00_process_loopback(), qla84xx_reset(), qla84xx_updatefw(), qla2x00_read_optrom(), qla2x00_update_optrom(), qlafx00_mgmt_cmd() and qla28xx_validate_flash_image().
Text from CVE List
Affected versions 12
- Linuxaffected: 01e0e15c8b3b32e006e5cccac10c8b377ac3d803 before 5f33efe04658968b6b3f432f904d5f1f74c12286CVE List
- Linuxaffected: 01e0e15c8b3b32e006e5cccac10c8b377ac3d803 before ef63922d8bdea03de1804af39a6b12212acb1be2CVE List
- Linuxaffected: 01e0e15c8b3b32e006e5cccac10c8b377ac3d803 before 740f3458a4798af54aaf8cf63e797d407e8b6d3bCVE List
- Linuxaffected: 01e0e15c8b3b32e006e5cccac10c8b377ac3d803 before f75bff451a2fac5aed82f9641df1e9a42c5a899dCVE List
- Linuxaffected: 01e0e15c8b3b32e006e5cccac10c8b377ac3d803 before 4cf38dd9465736141263ebb63375868311a0ec81CVE List
- Linuxaffected: 4.10CVE List
- Linuxunaffected: all versions before 4.10CVE List
- Linuxunaffected: 6.6.160 through 6.6.*CVE List
- Linuxunaffected: 6.12.112 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 5
- git.kernel.org/stable/c/5f33efe04658968b6b3f432f904d5f1f74c12286Referencevia CVE List
- git.kernel.org/stable/c/ef63922d8bdea03de1804af39a6b12212acb1be2Referencevia CVE List
- git.kernel.org/stable/c/740f3458a4798af54aaf8cf63e797d407e8b6d3bReferencevia CVE List
- git.kernel.org/stable/c/f75bff451a2fac5aed82f9641df1e9a42c5a899dReferencevia CVE List
- git.kernel.org/stable/c/4cf38dd9465736141263ebb63375868311a0ec81Referencevia CVE List