Vulnerabilidad en Linux (CVE-2026-46325)
Gravedad CVSS v3.1:
CRÍTICA
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
09/06/2026
Última modificación:
23/07/2026
Descripción
En el kernel de Linux, la siguiente vulnerabilidad ha sido resuelta:<br />
<br />
RDMA/rxe: Corrección de la conversión iova-a-va para tamaños de página de MR != PAGE_SIZE<br />
<br />
La implementación actual maneja incorrectamente las regiones de memoria (MRs) con tamaños de página diferentes al PAGE_SIZE del sistema. El problema central es que rxe_set_page() se llama con incrementos de paso mr->page_size, pero la page_list almacena punteros individuales a struct page, cada uno representando PAGE_SIZE de memoria.<br />
<br />
ib_sg_to_page() ha asegurado que cuando i>=1, o bien a) SG[i-1].dma_end y SG[i].dma_addr son contiguos o b) SG[i-1].dma_end y SG[i].dma_addr están alineados con mr->page_size.<br />
<br />
Esto lleva a una conversión iova-a-va incorrecta en los siguientes escenarios:<br />
<br />
1) page_size iova = 0x181800<br />
sg[0]: dma_addr=0x181800, len=0x800<br />
sg[1]: dma_addr=0x173000, len=0x1000<br />
<br />
Acceso iova = 0x181800 + 0x810 = 0x182010<br />
VA esperada: 0x173010 (segundo SG, desplazamiento 0x10)<br />
Antes de la corrección:<br />
- índice = (0x182010 >> 12) - (0x181800 >> 12) = 1<br />
- page_offset = 0x182010 & 0xFFF = 0x10<br />
- xarray[1] almacena la base de página del sistema 0x170000<br />
- VA resultante: 0x170000 + 0x10 = 0x170010 (incorrecto)<br />
<br />
2) page_size > PAGE_SIZE (ej., MR: 64K, sistema: 4K):<br />
ibmr->iova = 0x18f800<br />
sg[0]: dma_addr=0x18f800, len=0x800<br />
sg[1]: dma_addr=0x170000, len=0x1000<br />
<br />
Acceso iova = 0x18f800 + 0x810 = 0x190010<br />
VA esperada: 0x170010 (segundo SG, desplazamiento 0x10)<br />
Antes de la corrección:<br />
- índice = (0x190010 >> 16) - (0x18f800 >> 16) = 1<br />
- page_offset = 0x190010 & 0xFFFF = 0x10<br />
- xarray[1] almacena la página del sistema para dma_addr 0x170000<br />
- VA resultante: página del sistema de 0x170000 + 0x10 = 0x170010 (incorrecto)<br />
<br />
Yi Zhang informó de un kernel panic[1] hace años relacionado con este defecto.<br />
<br />
Solución:<br />
1. Reemplazar xarray con un array rxe_mr_page preasignado para indexación secuencial (todos los índices de página de MR son contiguos)<br />
2. Cada rxe_mr_page almacena tanto struct page como el desplazamiento dentro de la página del sistema<br />
3. Manejar las relaciones MR page_size != PAGE_SIZE:<br />
- page_size > PAGE_SIZE: Dividir las páginas de MR en múltiples páginas del sistema<br />
- page_size
Impacto
Puntuación base 3.x
9.80
Gravedad 3.x
CRÍTICA
Productos y versiones vulnerables
| CPE | Desde | Hasta |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2.3 (incluyendo) | 6.18.14 (excluyendo) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.19 (incluyendo) | 6.19.4 (excluyendo) |
Para consultar la lista completa de nombres de CPE con productos y versiones, ver esta página



