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

Vulnerabilidad en kernel de Linux (CVE-2024-56544)

Gravedad CVSS v3.1:
MEDIA
Tipo:
CWE-476 Desreferencia a puntero nulo (NULL)
Fecha de publicación:
27/12/2024
Última modificación:
03/02/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: udmabuf: cambia la matriz de folios de kmalloc a kvmalloc Cuando PAGE_SIZE es 4096, MAX_PAGE_ORDER es 10, en una máquina de 64 bits, page_alloc solo admite 4 MB. Si es mayor, se activa esta advertencia y se devuelve NULL. udmabuf puede cambiar el límite de tamaño. Si lo cambia a 3072 (3 GB) y luego asigna 3 GB, udmabuf no podrá crearlo. [ 4080.876581] ------------[ cortar aquí ]------------ [ 4080.876843] ADVERTENCIA: CPU: 3 PID: 2015 en mm/page_alloc.c:4556 __alloc_pages+0x2c8/0x350 [ 4080.878839] RIP: 0010:__alloc_pages+0x2c8/0x350 [ 4080.879470] Seguimiento de llamadas: [ 4080.879473] [ 4080.879473] ? __alloc_pages+0x2c8/0x350 [ 4080.879475] ? __warn.cold+0x8e/0xe8 [ 4080.880647] ? __alloc_pages+0x2c8/0x350 [ 4080.880909] ? report_bug+0xff/0x140 [ 4080.881175] ? handle_bug+0x3c/0x80 [ 4080.881556] ? exc_invalid_op+0x17/0x70 [ 4080.881559] ? asm_exc_invalid_op+0x1a/0x20 [ 4080.882077] ? udmabuf_create+0x131/0x400 Debido a MAX_PAGE_ORDER, kmalloc puede asignar un máximo de 4096 * (1 << 10), 4 MB de memoria, cada entrada de la matriz es un puntero (8 bytes), por lo que puede guardar 524288 páginas (2 GB). Además, es posible que no se garantice que se pueda aplicar el pedido costoso (pedido 3) debido a la fragmentación. Este parche cambia la matriz udmabuf para usar kvmalloc_array, lo que permite que la asignación se convierta en una función alternativa de vmalloc, lo que puede garantizar la asignación para cualquier tamaño y no afecta el rendimiento de las asignaciones de kmalloc.

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 4.20 (incluyendo) 6.11.11 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.12 (incluyendo) 6.12.2 (excluyendo)