🇰🇷 한글 설명
Linux 커널의 bmc150 가속도계 드라이버에서 인터럽트(IRQ) 존재 여부를 확인하지 않고 함수를 호출하여 발생하는 NULL 포인터 역참조 취약점입니다. 이로 인해 인터럽트 기능이 없는 장치에서 런타임 전원 관리(PM) 복구 시 커널 패닉이 발생할 수 있습니다.
💡 쉬운 설명
가속도 센서 장치가 인터럽트(신호 전달 기능)를 지원하지 않는데도 시스템이 이를 강제로 사용하려다 컴퓨터가 멈추는 오류입니다. 장치의 상태를 제대로 확인하지 않아 발생하는 소프트웨어 결함입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iio: accel: bmc150: Fix irq assumption regression
The code in bmc150-accel-core.c unconditionally calls
bmc150_accel_set_interrupt() in the iio_buffer_setup_ops,
such as on the runtime PM resume path giving a kernel
splat like this if the device has no interrupts:
Unable to handle kernel NULL pointer dereference at virtual
address 00000001 when read
PC is at bmc150_accel_set_interrupt+0x98/0x194
LR is at __pm_runtime_resume+0x5c/0x64
(...)
Call trace:
bmc150_accel_set_interrupt from bmc150_accel_buffer_postenable+0x40/0x108
bmc150_accel_buffer_postenable from __iio_update_buffers+0xbe0/0xcbc
__iio_update_buffers from enable_store+0x84/0xc8
enable_store from kernfs_fop_write_iter+0x154/0x1b4
This bug seems to have been in the driver since the beginning,
but it only manifests recently, I do not know why.
Store the IRQ number in the state struct, as this is a common
pattern in other drivers, then use this to determine if we have
IRQ support or not.
📍 영향받는 시스템
Linux Kernel (bmc150 accel driver 포함 버전)
⚔️ 공격 벡터
로컬 공격자가 인터럽트가 없는 특정 bmc150 장치를 조작하거나 전원 관리 상태를 변경하여 커널 패닉 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 bmc150 드라이버 수정 사항 반영
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 패치 버전인지 확인