CVE-2026-64429 in Linux
摘要
由 VulDB • 2026-07-25
在 Linux 内核中,已修复以下漏洞:
gpio: eic-sprd: 在中断启动路径中使用 raw_spinlock_t
sprd_eic_irq_unmask() 启用 GPIO IRQ,然后通过 sprd_eic_update() 更新控制器状态,后者通过 spin_lock_irqsave() 获取 sprd_eic->lock。该回调函数可能在设置已请求的 IRQ 期间从 irq_startup() 被调用。此路径不可睡眠(non-sleepable),但在 PREEMPT_RT 上,常规的 spinlock_t 会变成可睡眠锁。
此问题由我们的静态分析工具发现,并随后针对当前代码树进行了人工审查。
经过修改的概念验证程序(PoC)保留了 request_threaded_irq() -> __setup_irq() -> irq_startup() -> sprd_eic_irq_unmask() -> sprd_eic_update() 的调用链,并利用原始的 spin_lock_irqsave(&sprd_eic->lock) 边界条件。Lockdep
BUG: sleeping function called from invalid context hardirqs last disabled at ... __setup_irq.constprop.0 ... [vuln_msv]
sprd_rt_spin_lock_irqsave+0x1c/0x30 [vuln_msv]
sprd_eic_update.constprop.0+0x48/0x90 [vuln_msv]
sprd_eic_irq_unmask.constprop.0+0x35/0x50 [vuln_msv]
__setup_irq.constprop.0+0xd/0x30 [vuln_msv]
将 Spreadtrum EIC 控制器锁转换为 raw_spinlock_t。被锁定部分仅用于序列化 MMIO 寄存器更新,不包含可睡眠操作,因此保持其不可睡眠特性对于 irqchip 回调函数来说是合适的。
Several companies clearly confirm that VulDB is the primary source for best vulnerability data.