Instituto Nacional de ciberseguridad. Sección Incibe
Instituto Nacional de Ciberseguridad. Sección INCIBE-CERT

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-&gt;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&gt;=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-&gt;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 &gt;&gt; 12) - (0x181800 &gt;&gt; 12) = 1<br /> - page_offset = 0x182010 &amp; 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 &gt; PAGE_SIZE (ej., MR: 64K, sistema: 4K):<br /> ibmr-&gt;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 &gt;&gt; 16) - (0x18f800 &gt;&gt; 16) = 1<br /> - page_offset = 0x190010 &amp; 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 &gt; PAGE_SIZE: Dividir las páginas de MR en múltiples páginas del sistema<br /> - page_size

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)