🇰🇷 한글 설명
Linux 커널의 davinci MMC 드라이버에서 인터럽트 핸들러(IRQ handler)가 host->data가 NULL인 상태에서 특정 오류 상황(타임아웃 또는 CRC 오류)을 처리하려고 시도할 때 NULL 역참조가 발생합니다. 이로 인해 시스템이 충돌하거나 커널 패닉이 발생할 수 있는 취약점입니다.
💡 쉬운 설명
컴퓨터의 메모리 관리 과정에서 데이터가 비어있는 상태인데 이를 사용하려고 시도하여 시스템이 갑자기 멈추거나 꺼질 수 있는 오류입니다. 하드웨어 통신 중 발생하는 특정 오류 상황에서 이 문제가 나타납니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
mmc: davinci: avoid NULL deref of host->data in IRQ handler
mmc_davinci_irq() returns early only when both host->cmd and
host->data are NULL:
if (host->cmd == NULL && host->data == NULL) {
...
return IRQ_NONE;
}
So we may legitimately reach the rest of the handler with
host->data == NULL (and therefore data == NULL). The DATDNE branch
already guards against this with an explicit "if (data != NULL)"
check, but the subsequent TOUTRD ("read data timeout") and
CRCWR/CRCRD ("data CRC error") branches dereference data
unconditionally:
if (qstatus & MMCST0_TOUTRD) {
data->error = -ETIMEDOUT; <-- NULL deref
...
davinci_abort_data(host, data);
}
if (qstatus & (MMCST0_CRCWR | MMCST0_CRCRD)) {
data->error = -EILSEQ; <-- NULL deref
...
}
If either bit is set in qstatus while host->data is NULL, the kernel
will crash inside the IRQ handler. smatch flags this:
drivers/mmc/host/davinci_mmc.c:933 mmc_davinci_irq() error: we
previously assumed 'data' could be null (see line 914)
Gate both branches on a non-NULL data, matching the existing pattern
used by the DATDNE branch.
No functional change for callers where data is non-NULL, which is
the only case in which these branches did meaningful work before
this change.
📍 영향받는 시스템
Linux kernel (davinci mmc driver 포함 버전)
⚔️ 공격 벡터
하드웨어 인터럽트를 유도하여 특정 오류 상태(타임아웃 또는 CRC 오류)를 발생시킴으로써 커널 패닉 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 davinci_mmc.c의 NULL 체크 로직을 반영해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인합니다.
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux