Descripción
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: RDMA/rxe: Corrección de un desbordamiento de entero en mr_check_range() que provoca acceso fuera de límites (OOB) mr_check_range() valida que [iova, iova+length) se encuentre dentro del rango de la MR registrada mediante una aritmética propensa al desbordamiento circular (wraparound): if (iova < mr->ibmr.iova || iova + length > mr->ibmr.iova + mr->ibmr.length) Un par remoto puede manipular un RETH de RDMA-Write/Read de modo que iova + length dé la vuelta a 0 (por ejemplo, iova=0xfffffffffffffff8, length=8), omitiendo la verificación. Luego, rxe_mr_iova_to_index() calcula un índice enorme (int idx, protegido solo por WARN_ON) y rxe_mr_copy_xarray() desreferencia mr->page_info[huge], lo que provoca una lectura/escritura fuera de límites y un kernel oops que puede ser desencadenado por un par remoto no autenticado. Se reescribe la verificación de forma segura frente a desbordamientos; las dos primeras cláusulas garantizan que las restas posteriores no produzcan subdesbordamiento: if (iova < mr->ibmr.iova || length > mr->ibmr.length || iova - mr->ibmr.iova > mr->ibmr.length - length) Con la corrección, mr_check_range() retorna -EINVAL para el iova manipulado y el respondedor informa REMOTE_ACCESS_ERROR en lugar de provocar el acceso fuera de límites.
Qué hacer
Revisa si usas el producto afectado y en qué versión, y aplica la actualización o la mitigación que indique el aviso del fabricante. CISA no ha confirmado que se esté explotando; si eso cambia, esta ficha pasa a «explotada» y te avisamos en el boletín.
Versiones afectadas
- Linux Afectadas: 8700e3e7c4857d28ebaa824509934556da0b3e76 y anteriores a b7d2118660545a00b21e83010ded1a231c6fb8c5 · 8700e3e7c4857d28ebaa824509934556da0b3e76 y anteriores a 5d9426a74fc8cb8f375fcdc19b465a030f9b8cab · 8700e3e7c4857d28ebaa824509934556da0b3e76 y anteriores a 2f3b705144e3a3c14184fec6e354680081fe91ec · 8700e3e7c4857d28ebaa824509934556da0b3e76 y anteriores a 3431f525718f6b07da308cda6d44f8cb548bbd37 · 8700e3e7c4857d28ebaa824509934556da0b3e76 y anteriores a d10e2a08799e858d3e71ea4169bcd018f216d444
- Linux Afectadas: 4.8 No afectadas: 6.6.158 · 6.12.112 · 6.18.54 · 7.2.8 · 7.3
Según el registro de la vulnerabilidad en CVE.org, tal como lo publicó el fabricante. Confirma tu versión exacta en el aviso del fabricante.
Referencias
- Referencia en git.kernel.orggit.kernel.org/stable/c/b7d2118660545a00b21e83010ded1a231c6fb8c5
- Referencia en git.kernel.orggit.kernel.org/stable/c/5d9426a74fc8cb8f375fcdc19b465a030f9b8cab
- Referencia en git.kernel.orggit.kernel.org/stable/c/2f3b705144e3a3c14184fec6e354680081fe91ec
- Referencia en git.kernel.orggit.kernel.org/stable/c/3431f525718f6b07da308cda6d44f8cb548bbd37
- Referencia en git.kernel.orggit.kernel.org/stable/c/d10e2a08799e858d3e71ea4169bcd018f216d444
Ver el texto original en inglés (CVE.org)
RDMA/rxe: Fix integer overflow in mr_check_range() leading to OOB access
In the Linux kernel, the following vulnerability has been resolved: RDMA/rxe: Fix integer overflow in mr_check_range() leading to OOB access mr_check_range() validates that [iova, iova+length) falls within the registered MR range using wraparound-prone arithmetic: if (iova < mr->ibmr.iova || iova + length > mr->ibmr.iova + mr->ibmr.length) A remote peer can craft an RDMA-Write/Read RETH so that iova + length wraps to 0 (e.g. iova=0xfffffffffffffff8, length=8), bypassing the check. rxe_mr_iova_to_index() then computes a huge index (int idx, only guarded by WARN_ON) and rxe_mr_copy_xarray() dereferences mr->page_info[huge], causing an out-of-bounds read/write and a kernel oops that is triggerable by an unauthenticated remote peer. Rewrite the check in overflow-safe form; the first two clauses guarantee that the subsequent subtractions do not underflow: if (iova < mr->ibmr.iova || length > mr->ibmr.length || iova - mr->ibmr.iova > mr->ibmr.length - length) With the fix, mr_check_range() returns -EINVAL for the crafted iova and the responder reports REMOTE_ACCESS_ERROR instead of triggering the OOB.