CVE-2026-31426 in Linux
Riassunto
di VulDB • 14/06/2026
Nel kernel Linux è stata risolta la seguente vulnerabilità:
ACPI: EC: pulizia dei gestori in caso di errore durante il probe in acpi_ec_setup()
Quando ec_install_handlers() restituisce -EPROBE_DEFER su piattaforme con hardware ridotto, ha già avviato l'EC (Embedded Controller) e installato il gestore dello spazio degli indirizzi utilizzando lo struct acpi_ec come contesto del gestore. Tuttavia, acpi_ec_setup() propaga l'errore senza effettuare alcuna pulizia.
Il chiamante acpi_ec_add() successivamente libera lo struct acpi_ec per le istanze non di avvio (non-boot), lasciando un contesto del gestore pendente (dangling) in ACPICA.
Qualsiasi successiva valutazione AML che accede a un campo OpRegion dell'EC viene instradata verso acpi_ec_space_handler() con il puntatore già liberato, causando 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>
Allocato dal task 1: acpi_ec_alloc (drivers/acpi/ec.c:1424) acpi_ec_add (drivers/acpi/ec.c:1692)
Liberato dal task 1: kfree (mm/slub.c:6876) acpi_ec_add (drivers/acpi/ec.c:1751)
Il bug si attiva su piattaforme EC con hardware ridotto (ec->gpe < 0) quando il provider IRQ GPIO differisce il probing. Una volta che esiste un gestore obsoleto, qualsiasi lettura non privilegiata di sysfs che causa l'accesso AML a una OpRegion dell'EC (batteria, termica, retroilluminazione) utilizza il puntatore pendente.
Si risolve il problema chiamando ec_remove_handlers() nel percorso di errore di acpi_ec_setup() prima di azzerare first_ec. ec_remove_handlers() verifica ogni bit EC_FLAGS_* prima di agire, quindi è sicuro chiamarlo indipendentemente da quanto sia avanzata l'esecuzione di ec_install_handlers():
-ENODEV (gestore non installato): chiama solo acpi_ec_stop() -EPROBE_DEFER (gestore installato): rimuove il gestore e arresta l'EC
If you want to get best quality of vulnerability data, you may have to visit VulDB.