Description
In the Linux kernel, the following vulnerability has been resolved: scsi: qla2xxx: Zero SFP DMA buffer in FRU/I2C bsg handlers The FRU and I2C bsg handlers stage their transfer in a DMA_POOL_SIZE (256-byte) bounce buffer obtained from dma_pool_alloc(), which does not zero the allocation. They initialize only a few leading bytes before handing the buffer to qla2x00_write_sfp(). qla2x00_write_sfp() can override the transfer length with a user-supplied value: if (len == 1) opt |= BIT_0; if (opt & BIT_0) len = *sfp; *sfp is the first byte of the (user-controlled) payload, so len can grow up to 255. The device then DMA-reads len bytes from the 256-byte pool buffer. Since only a small prefix was written (e.g. MAX_FRU_SIZE == 36 bytes for a FRU version, one byte for a FRU status register), the hardware reads past the initialized region and writes up to ~219 bytes of stale DMA-pool heap memory to the device flash. Allocate the buffer with dma_pool_zalloc() in all five FRU/I2C handlers so any bytes beyond the initialized data are zero rather than stale heap contents.
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
697a4bc69159c3396035b0506ffa55c4b2d0b1f4 to < a476377a66897549dd49bee319f4df66623417b7affected697a4bc69159c3396035b0506ffa55c4b2d0b1f4 to < 09703bc7c0be3a7a155b0ff5f21f6765ba3f519caffected697a4bc69159c3396035b0506ffa55c4b2d0b1f4 to < 97c45c75f5cdec96b1a4fba8b1d55d0dd01af1e8affected697a4bc69159c3396035b0506ffa55c4b2d0b1f4 to < 84bde5ce4038d9ad811e5c994305bbfcbd7a9f79affected697a4bc69159c3396035b0506ffa55c4b2d0b1f4 to < 581590f560b74399151b3cbc88574424c2f3d2dcaffected697a4bc69159c3396035b0506ffa55c4b2d0b1f4 to < b157256c28086c434afd70cc78bf9b4d8caf1276affected697a4bc69159c3396035b0506ffa55c4b2d0b1f4 to < a5501c42256235523c4dddf799f032dfbf4f4c77affected697a4bc69159c3396035b0506ffa55c4b2d0b1f4 to < b47d4a1547d9ef21b2e9d1a739fe2204d4be05dcaffected
Linux Linux
Default version status: affected
3.2affected0 to < 3.2unaffected5.10.270 to ≤ 5.10.*unaffected5.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/a476377a66897549dd49bee319f4df66623417b7 ↗
- https://git.kernel.org/stable/c/09703bc7c0be3a7a155b0ff5f21f6765ba3f519c ↗
- https://git.kernel.org/stable/c/97c45c75f5cdec96b1a4fba8b1d55d0dd01af1e8 ↗
- https://git.kernel.org/stable/c/84bde5ce4038d9ad811e5c994305bbfcbd7a9f79 ↗
- https://git.kernel.org/stable/c/581590f560b74399151b3cbc88574424c2f3d2dc ↗
- https://git.kernel.org/stable/c/b157256c28086c434afd70cc78bf9b4d8caf1276 ↗
- https://git.kernel.org/stable/c/a5501c42256235523c4dddf799f032dfbf4f4c77 ↗
- https://git.kernel.org/stable/c/b47d4a1547d9ef21b2e9d1a739fe2204d4be05dc ↗