CVE-2026-64429 in Linux
요약
\~에 의해 VulDB • 2026. 07. 25.
리눅스 커널에서 다음 취약점이 해결되었습니다:
gpio: eic-sprd: irq 시작 경로에서 raw_spinlock_t 사용
sprd_eic_irq_unmask()는 GPIO IRQ를 활성화한 후 sprd_eic_update()를 통해 컨트롤러 상태를 업데이트합니다. 이 함수는 spin_lock_irqsave()로 sprd_eic->lock을 획득합니다. 해당 콜백은 요청된 IRQ 설정 중 irq_startup()에서 호출될 수 있습니다. 이 경로는 슬립 불가능(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 콜백에 대해 비슬립(non-sleeping) 상태를 유지하는 것이 적절합니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.