Description
In the Linux kernel, the following vulnerability has been resolved: scsi: scsi_debug: Fix REPORT ZONES alloc_len underflow OOB write resp_report_zones() sizes the reply buffer from the CDB allocation length. The v3 fix rounds alloc_len up with ALIGN() before deriving the descriptor count: rep_max_zones = (ALIGN((u64)alloc_len, RZONES_DESC_HD) - RZONES_DESC_HD) >> ilog2(RZONES_DESC_HD); arr_len = (u64)RZONES_DESC_HD * (rep_max_zones + 1); For alloc_len in 0xFFFFFFC1..0xFFFFFFFF, ALIGN() rounds up to 0x100000000, so arr_len is 4 GB. On 32-bit, kzalloc()'s size_t is 32-bit and truncates 0x100000000 to 0; kzalloc(0) returns ZERO_SIZE_PTR, which passes the !arr check, and desc = arr + 64 is then dereferenced in the loop -> out-of-bounds write / panic. Clamp rep_max_zones to devip->nr_zones. The loop already stops at sdebug_capacity (after nr_zones zones), so a report can never hold more than nr_zones descriptors; the clamp does not change the report, it only bounds arr_len to (nr_zones + 1) * RZONES_DESC_HD, a real device property that can never reach 0x100000000.
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
ebacb44cb2042b90951140eda806bedad23ef554 to < 7b615fc139e35c81077046df44725c532f7e2404affected7db0e0c8190a086ef92ce5bb960836cde49540aa to < 5d3e1d006bbb543259f9e31824caadbfff6a5465affected7db0e0c8190a086ef92ce5bb960836cde49540aa to < 49e5b25a0b74dbac595f122e5608fdce2918cc4eaffected7db0e0c8190a086ef92ce5bb960836cde49540aa to < 495058429ca55ab7fcc21977b63b92907ad68066affected7db0e0c8190a086ef92ce5bb960836cde49540aa to < 2047ed09bf13453b7d6f9431b112ec07984dd69baffected7db0e0c8190a086ef92ce5bb960836cde49540aa to < d6e6da6bc3b53231fac77ffab428da8173ee729caffected7db0e0c8190a086ef92ce5bb960836cde49540aa to < 93dde0bf2f39a0f9f57fd610aa3201ce5b753433affectedc4d2d7c935a4ad20e8e726ca10499cefe4537103affected5.15.8 to < 5.15.217affected5.10.85 to < 5.11affected
Linux Linux
Default version status: affected
5.16affected0 to < 5.16unaffected5.15.217 to ≤ 5.15.*unaffected6.1.183 to ≤ 6.1.*unaffected6.6.151 to ≤ 6.6.*unaffected6.12.103 to ≤ 6.12.*unaffected6.18.44 to ≤ 6.18.*unaffected7.1.8 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/7b615fc139e35c81077046df44725c532f7e2404 ↗
- https://git.kernel.org/stable/c/5d3e1d006bbb543259f9e31824caadbfff6a5465 ↗
- https://git.kernel.org/stable/c/49e5b25a0b74dbac595f122e5608fdce2918cc4e ↗
- https://git.kernel.org/stable/c/495058429ca55ab7fcc21977b63b92907ad68066 ↗
- https://git.kernel.org/stable/c/2047ed09bf13453b7d6f9431b112ec07984dd69b ↗
- https://git.kernel.org/stable/c/d6e6da6bc3b53231fac77ffab428da8173ee729c ↗
- https://git.kernel.org/stable/c/93dde0bf2f39a0f9f57fd610aa3201ce5b753433 ↗