CVE-2026-31426Linux内核的ACPI EC驱动存在释放后使用漏洞。在精简硬件平台上,当GPIO IRQ提供程序探测延迟导致EC处理程序安装失败时,系统未正确清理已注册的资源。这导致在acpi_ec结构体被释放后,ACPICA中仍残留指向该内存的悬空指针。后续用户空间读取sysfs触发AML代码访问EC区域时,内核将访问已释放的内存,可能导致系统崩溃或权限提升。
该漏洞源于Linux内核drivers/acpi/ec.c中acpi_ec_setup()函数的错误处理缺陷。当ec_install_handlers()在精简硬件平台返回-EPROBE_DEFER错误时,意味着GPIO IRQ提供程序尚未就绪。此时,函数已启动EC并安装了地址空间处理程序,但在错误路径中未调用ec_remove_handlers()进行清理。随后,acpi_ec_add()释放了acpi_ec结构体,而ACPICA内核子系统的地址空间处理程序仍持有指向该已释放内存的上下文指针。当后续发生AML评估(例如通过sysfs读取电池、热区或背光状态)时,acpi_ev_address_space_dispatch会调用acpi_ec_space_handler,该函数尝试对已释放的acpi_ec结构体执行mutex_lock操作,从而触发KASAN检测到的slab-use-after-free错误。由于触发条件仅需常规的本地文件读取操作,且无需特殊权限,该漏洞具有潜在的安全风险。