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

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

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

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: cacheinfo: Asignar memoria durante la conexión en caliente de la CPU si no se hace desde la CPU principal. el commit 5944ce092b97 ("arch_topology: Generar cacheinfo desde la CPU principal") añade una funcionalidad que las arquitecturas pueden utilizar para asignar y generar opcionalmente cacheinfo de forma temprana durante el arranque. el commit 6539cffa9495 ("cacheinfo: Añadir inicializador de nivel temprano específico de la arquitectura") permite que las CPU secundarias corrijan (y reasignen memoria) los datos de cacheinfo si es necesario. Si no se utiliza la funcionalidad de generación temprana y cacheinfo no necesita corrección, nunca se asigna memoria para cacheinfo. x86 no utiliza la funcionalidad de generación temprana. En consecuencia, durante la devolución de llamada hotplug de CPU de cacheinfo, last_level_cache_is_valid() intenta desreferenciar un puntero NULL: BUG: kernel NULL pointer dereference, address: 0000000000000100 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not present page PGD 0 P4D 0 Oops: 0000 [#1] PREEPMT SMP NOPTI CPU: 0 PID 19 Comm: cpuhp/0 Not tainted 6.4.0-rc2 #1 RIP: 0010: last_level_cache_is_valid+0x95/0xe0a Asigne memoria para cacheinfo durante la devolución de llamada hotplug de CPU de cacheinfo si no se hizo antes. Además, antes de determinar la validez de la información de caché de último nivel, asegúrese de que se haya asignado. No basta con comprobar si hay cache_leaves() distintos de cero, ya que algunas arquitecturas (por ejemplo, los procesadores Intel) tienen cache_leaves() distintos de cero antes de la asignación. La anulación de referencias a cacheinfo NULL puede ocurrir en update_per_cpu_data_slice_size(). Esta función itera sobre todas las CPU en línea. Sin embargo, es posible que una CPU se haya conectado recientemente, pero que su cacheinfo aún no se haya asignado. Mientras esté aquí, elimine una sangría innecesaria en allocate_cache_info(). [ bp: Masaje. ]

Productos y versiones vulnerables

CPE Desde Hasta
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.4 (incluyendo) 6.6.66 (excluyendo)
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.7 (incluyendo) 6.12.5 (excluyendo)
cpe:2.3:o:linux:linux_kernel:6.13:rc1:*:*:*:*:*:*