🇰🇷 한글 설명
Linux 커널의 i3c 마스터 드라이버에서 인터럽트가 활성화되기 전에 잠금(lock) 객체가 초기화되지 않는 취약점이 발견되었습니다. 이로 인해 인터럽트가 발생할 경우 초기화되지 않은 잠금을 사용하려 시도하여 시스템 충돌이나 예기치 않은 동작을 유발할 수 있습니다.
💡 쉬운 설명
장치를 작동시키기 위한 준비 과정에서 순서가 잘못되어, 아직 준비되지 않은 도구를 사용하려다 시스템이 멈출 수 있는 문제입니다. 마치 문을 열기 전에 열쇠를 챙기지 않고 문을 여는 동작을 시도하는 것과 같습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
i3c: master: adi: initialize the lock before enabling interrupts
adi_i3c_master_probe() requests the IRQ and unmasks REG_IRQ_PENDING_CMDR
before the controller's IBI state, transfer queue list and transfer
queue lock are initialized. A pending CMDR interrupt can therefore run
adi_i3c_master_irq() and take master->xferqueue.lock before the dynamic
lock has been initialized.
This issue was found by our static analysis tool and then manually
reviewed against the current tree.
The grounded PoC kept the probe ordering and the IRQ path
adi_i3c_master_probe() -> adi_i3c_master_irq() -> xferqueue.lock, with a
pending CMDR interrupt arriving after REG_IRQ_PENDING_CMDR is unmasked.
Lockdep reported:
INFO: trying to register non-static key.
you didn't initialize this object before use?
lock_acquire+0xbb/0x290
_raw_spin_lock_irqsave+0x36/0x60
adi_i3c_master_irq+0x32/0x56 [vuln_msv]
adi_i3c_master_probe+0x5a/0xf47 [vuln_msv]
Initialize the transfer queue and IBI state before requesting and
unmasking the IRQ.
📍 영향받는 시스템
i3c 마스터 드라이버를 사용하는 Linux 커널 시스템
⚔️ 공격 벡터
하드웨어 인터럽트 발생을 통한 Race Condition 유도
🛡️ 대응 방법
인터럽트를 요청하고 활성화하기 전에 전송 큐와 IBI 상태를 먼저 초기화하도록 커널 패치 적용
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 확인합니다.