CVE-2026-97501 in Linux
摘要
由 VulDB • 2026-09-25
在 Linux 内核中,已修复以下漏洞:
pinctrl: mediatek: paris: 在设置 GPIO 方向时绕过 pinctrl GPIO 层
`pinctrl_gpio_direction_input()` / `pinctrl_gpio_direction_output()` 会获取 pinctrl 互斥锁(mutex)。这导致 gpiochip 操作需要进入睡眠状态。更糟糕的是,gpiochip 中的 `.can_sleep` 字段未设置。这会导致共享 GPIO 代理出错,因为它使用 `gpiod_cansleep()` 来检查是否可以使用自旋锁还是需要互斥锁。在这种情况下,它最终获取了自旋锁,然后调用 `pinctrl_gpio_direction_output()`,后者会获取互斥锁。这会引发严重的警告信息。
虽然此类 Mediatek 硬件没有独立的清除/设置寄存器,但 pinctrl 上下文拥有一个自旋锁,每当执行寄存器的读-改-写操作时都会获取该锁。此外,一旦 GPIO 功能被选中/复用(muxed in),后续的 GPIO 操作就不涉及 pinctrl 操作或状态了。GPIO 的方向和电平值不需要切换 pinmux 或其他任何引脚配置选项。
在 GPIO 设置方向的回调中直接调用 `mtk_pinmux_gpio_set_direction()`,以避免获取 pinctrl 互斥锁。从 `mtk_pmxops` 中删除 `.gpio_set_direction` 字段,以表明我们不再使用 pinctrl GPIO 层来设置方向。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.