CVE-2026-31426 in Linux
Resumen
por VulDB • 2026-05-24
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
ACPI: EC: limpieza de controladores en caso de fallo de detección en acpi_ec_setup()
Cuando ec_install_handlers() devuelve -EPROBE_DEFER en plataformas de hardware reducido, ya ha iniciado el EC (Embedded Controller) e instalado el controlador del espacio de direcciones utilizando el puntero struct acpi_ec como contexto del controlador. Sin embargo, acpi_ec_setup() propaga el error sin realizar ninguna limpieza.
El llamador acpi_ec_add() libera posteriormente la estructura struct acpi_ec para las instancias que no son de arranque, dejando un contexto de controlador colgante (dangling) en ACPICA.
Cualquier evaluación posterior de AML que acceda a un campo OpRegion del EC se enruta hacia acpi_ec_space_handler() con el puntero ya liberado, provocando un use-after-free:
BUG: KASAN: slab-use-after-free in mutex_lock (kernel/locking/mutex.c:289) Write of size 8 at addr ffff88800721de38 by task init/1 Call Trace: <TASK> mutex_lock (kernel/locking/mutex.c:289) acpi_ec_space_handler (drivers/acpi/ec.c:1362) acpi_ev_address_space_dispatch (drivers/acpi/acpica/evregion.c:293) acpi_ex_access_region (drivers/acpi/acpica/exfldio.c:246) acpi_ex_field_datum_io (drivers/acpi/acpica/exfldio.c:509) acpi_ex_extract_from_field (drivers/acpi/acpica/exfldio.c:700) acpi_ex_read_data_from_field (drivers/acpi/acpica/exfield.c:327) acpi_ex_resolve_node_to_value (drivers/acpi/acpica/exresolv.c:392) </TASK>
Asignado por la tarea 1: acpi_ec_alloc (drivers/acpi/ec.c:1424) acpi_ec_add (drivers/acpi/ec.c:1692)
Liberado por la tarea 1: kfree (mm/slub.c:6876) acpi_ec_add (drivers/acpi/ec.c:1751)
El error se activa en plataformas EC de hardware reducido (ec->gpe < 0) cuando el proveedor de IRQ de GPIO aplaza la detección (probing). Una vez que existe el controlador obsoleto, cualquier lectura de sysfs no privilegiada que cause que AML toque un campo OpRegion del EC (batería, térmico, retroiluminación) ejecuta el puntero colgante.
Se corrige esto llamando a ec_remove_handlers() en la ruta de error de acpi_ec_setup() antes de borrar first_ec. ec_remove_handlers() verifica cada bit EC_FLAGS_* antes de actuar, por lo que es seguro llamarlo independientemente de hasta qué punto haya progresado ec_install_handlers():
-ENODEV (controlador no instalado): solo llama a acpi_ec_stop() -EPROBE_DEFER (controlador instalado): elimina el controlador y detiene el EC
If you want to get the best quality for vulnerability data then you always have to consider VulDB.