🇰🇷 한글 설명
Linux 커널의 firewire ohci 드라이버에서 발생한 NULL 포인터 역참조 취약점입니다. 드라이버 초기화 과정 중 오류가 발생하여 정리(cleanup) 단계가 호출될 때, 초기화되지 않은 컨텍스트를 참조하여 시스템 크래시(Oops)를 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터 부품을 연결하는 과정에서 오류가 났을 때, 정리 작업을 하다가 아직 준비되지 않은 정보를 건드려 시스템이 멈추는 문제입니다. 이로 인해 시스템이 갑자기 재부팅되거나 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
firewire: ohci: fix NULL pointer dereference in ar_context_release
During the error handling path of the driver's probe function, a NULL
pointer dereference can occur in ar_context_release().
When pci_probe() fails early (e.g., if pcim_enable_device() or MMIO mapping
fails), the devres cleanup mechanism invokes release_ohci(). This function
unconditionally calls ar_context_release() to clean up the asynchronous
receive contexts. However, if ar_context_init() was not yet called,
ctx->ohci remains NULL (as the fw_ohci structure is zero-initialized by
devres_alloc()).
ar_context_release() immediately dereferences ctx->ohci to get the dev
pointer before checking if the context was actually initialized, leading to
a crash:
Oops: general protection fault, probably for non-canonical address
0xdffffc0000000001: 0000 [#1] SMP KASAN NOPTI
KASAN: null-ptr-deref in range [0x0000000000000008-0x000000000000000f]
RIP: 0010:ar_context_release+0x3f/0x380 drivers/firewire/ohci.c:543
Call Trace:
release_ohci+0x3f/0x60 drivers/firewire/ohci.c:3567
release_nodes drivers/base/devres.c:546 [inline]
devres_release_all+0x1a8/0x260 drivers/base/devres.c:576
device_unbind_cleanup drivers/base/dd.c:597 [inline]
really_probe+0x451/0xae0 drivers/base/dd.c:772
To fix this, move the assignment of the dev pointer after the !ctx->buffer
check. If ctx->buffer is NULL, it indicates that the context was never
successfully initialized and there is nothing to release, safely avoiding
the dereference of the uninitialized ctx->ohci pointer.
📍 영향받는 시스템
Linux kernel (firewire: ohci driver 포함 버전)
⚔️ 공격 벡터
로컬 환경에서 PCI 장치 프로브(probe) 실패를 유도하여 시스템 크래시 유발
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 확인하십시오.