CVE-2025-39960CVE-2025-39960是Linux内核gpiolib ACPI子系统中存在的一个高危漏洞。该漏洞源于自commit 7c010d463372("gpiolib: acpi: Make sure we fill struct acpi_gpio_info")引入的回归问题。在该提交之后,未初始化的acpi_gpio_info结构体被传递给__acpi_find_gpio()函数,在调用栈深处,acpi_populate_gpio_lookup函数会使用info->quirks字段。由于该字段未被初始化,包含了栈上的随机数据,导致后续逻辑判断出错。该漏洞最直接的影响是导致i2c_hid_acpi驱动探测失败,系统日志中会出现"HID over i2c has not been provided an Int IRQ"的错误提示,最终返回错误码-22(EINVAL),使得相关I2C HID设备(如触摸屏、键盘等)无法正常工作。CVSS评分为7.8,属于高危级别,攻击者需要本地低权限即可利用,无需用户交互,可能对系统的机密性、完整性和可用性造成高影响。
该漏洞的技术原理在于Linux内核gpiolib ACPI模块中的结构体未初始化问题。具体而言,__acpi_find_gpio()函数接收一个acpi_gpio_info结构体指针作为参数,在commit 7c010d463372之前,该结构体在调用前会被正确填充。但在此提交之后,调用方传递的是栈上未初始化的acpi_gpio_info结构体。在acpi_populate_gpio_lookup()函数中,会直接读取info->quirks字段的值,该字段包含了栈上的残留数据(garbage data)。由于quirks字段的值不确定,可能导致GPIO查找逻辑进入错误的分支,最终返回-22错误码(EINVAL)。对于i2c_hid_acpi驱动而言,这意味着无法获取中断IRQ,导致驱动probe失败,I2C HID设备(如笔记本的触摸屏、触摸板等)无法使用。攻击者作为本地低权限用户,可以通过触发相关代码路径(如加载特定ACPI表或连接特定设备)来利用此漏洞,可能导致系统服务不可用或权限提升的潜在风险。修复方案是在调用__acpi_find_gpio()之前,使用memset或其他方式将acpi_gpio_info结构体清零初始化。