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

Vulnerabilidad en kernel de Linux (CVE-2025-21767)

Gravedad:
Pendiente de análisis
Tipo:
No Disponible / Otro tipo
Fecha de publicación:
27/02/2025
Última modificación:
13/03/2025

Descripción

En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad: clocksource: Use migrants_disable() para evitar llamar a get_random_u32() en un contexto atómico El siguiente informe de error ocurrió con un kernel PREEMPT_RT: ERROR: función inactiva llamada desde un contexto no válido en kernel/locking/spinlock_rt.c:48 in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 2012, name: kwatchdog preempt_count: 1, expected: 0 Profundidad de anidamiento de RCU: 0, expected: 0 get_random_u32+0x4f/0x110 clocksource_verify_choose_cpus+0xab/0x1a0 clocksource_verify_percpu.part.0+0x6b/0x330 clocksource_watchdog_kthread+0x193/0x1a0 Esto se debe al hecho de que clocksource_verify_choose_cpus() se invoca con la preempción deshabilitada. Esta función invoca get_random_u32() para obtener números aleatorios para elegir las CPU. El bloqueo local batched_entropy_32 y/o el spinlock base_crng.lock en driver/char/random.c se adquirirán durante la llamada. En el kernel PREEMPT_RT, ambos son bloqueos inactivos y, por lo tanto, no se pueden adquirir en un contexto atómico. Solucione este problema utilizando migrants_disable() para permitir que smp_processor_id() se utilice de manera confiable sin introducir un contexto atómico. Luego, se llama a preempt_disable() después de clocksource_verify_choose_cpus() pero antes de que se ejecute la medición de la fuente de reloj para evitar introducir una latencia inesperada.

Impacto