Description
In the Linux kernel, the following vulnerability has been resolved: RDMA/efa: Fix PBL chunk length computation On register MR, when creating the PBL, if it's an indirect PBL we create a chunk list to hold the PBL pages pointers. Each chunk is 4KB in size and can hold 510 addresses (EFA_PTRS_PER_CHUNK) and has a 12-byte control buffer at the end of it holding the next chunk's pointer and its length. If the PBL number of pages is a multiple of EFA_PTRS_PER_CHUNK, the calculated last chunk length is wrongly computed as 0, even though that chunk is fully populated with 510 real page pointers. This wrong length is used both to DMA map the chunk and is propagated to the device, causing the device to see the chunk as empty and reject the memory registration. Fix the calculation so it will be performed only if the number of pages isn't a multiple of EFA_PTRS_PER_CHUNK, if it is, its already handled in the above loop correctly. Also prevent out-of-bounds reach in the chunks array in such scenario.
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
40909f664d279765af430acc5db348a0b71c9b0a to < 665cd418b8561a099c3854443f8ad8ae751b72a0affected40909f664d279765af430acc5db348a0b71c9b0a to < 932e5684906a090644a9061fae2d254041c3b8f2affected40909f664d279765af430acc5db348a0b71c9b0a to < 489b28f2377afa70c18c45b06a6387f3d39bb123affected40909f664d279765af430acc5db348a0b71c9b0a to < aadf3f9b5edb7f0a77e9172b237d2e07c754829caffected40909f664d279765af430acc5db348a0b71c9b0a to < 3982714e15512b83115897806dacc94899683420affected40909f664d279765af430acc5db348a0b71c9b0a to < da7805f0211af19968584e621074f253ac07dba7affected40909f664d279765af430acc5db348a0b71c9b0a to < 1d4b5902773475fc97151379b7e5f09cad0fa57baffected40909f664d279765af430acc5db348a0b71c9b0a to < 229b42d7450c1cf96f45ec39ebb69211b06bc036affected
Linux Linux
Default version status: affected
5.2affected0 to < 5.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.52 to ≤ 6.18.*unaffected7.2.6 to ≤ 7.2.*unaffected7.3 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/665cd418b8561a099c3854443f8ad8ae751b72a0 ↗
- https://git.kernel.org/stable/c/932e5684906a090644a9061fae2d254041c3b8f2 ↗
- https://git.kernel.org/stable/c/489b28f2377afa70c18c45b06a6387f3d39bb123 ↗
- https://git.kernel.org/stable/c/aadf3f9b5edb7f0a77e9172b237d2e07c754829c ↗
- https://git.kernel.org/stable/c/3982714e15512b83115897806dacc94899683420 ↗
- https://git.kernel.org/stable/c/da7805f0211af19968584e621074f253ac07dba7 ↗
- https://git.kernel.org/stable/c/1d4b5902773475fc97151379b7e5f09cad0fa57b ↗
- https://git.kernel.org/stable/c/229b42d7450c1cf96f45ec39ebb69211b06bc036 ↗