🇰🇷 한글 설명
Linux 커널의 ADIS IMU 드라이버에서 adis_init() 함수가 adis->ops 포인터를 먼저 NULL 확인 없이 역참조하는 취약점. adis16480, adis16490, adis16545 등 여러 드라이버가 영향받으며, 드라이버 로드 시 NULL 포인터 역참조 오류로 인한 커널 패닉 유발. 로컬 공격자가 드라이버를 강제 로드하면 서비스 거부(DoS) 가능.
💡 쉬운 설명
Linux 센서 드라이버가 메모리 접근 전 필수 확인을 건너뛰는 버그입니다. 드라이버 로드 시 시스템이 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iio: imu: adis: Fix NULL pointer dereference in adis_init
The adis_init() function dereferences adis->ops to check if the
individual function pointers (write, read, reset) are NULL, but does
not first check if adis->ops itself is NULL.
Drivers like adis16480, adis16490, adis16545 and others do not set
custom ops and rely on adis_init() assigning the defaults. Since struct
adis is zero-initialized by devm_iio_device_alloc(), adis->ops is NULL
when adis_init() is called, causing a NULL pointer dereference:
Unable to handle kernel NULL pointer dereference at virtual address 0000000000000000
pc : adis_init+0xc0/0x118
Call trace:
adis_init+0xc0/0x118
adis16480_probe+0xe0/0x670
Fix this by checking if adis->ops is NULL before dereferencing it,
falling through to assign the default ops in that case.
📍 영향받는 시스템
Linux kernel 2.6.38+ (ADIS IMU drivers: adis16480, adis16490, adis16545, adis16477 등)
⚔️ 공격 벡터
로컬 권한 필요, 드라이버 로드 시 NULL pointer dereference 유발
🛡️ 대응 방법
Linux 커널을 최신 버전으로 업데이트하여 adis_init() 함수의 NULL 체크 추가 적용
🔧 검증 코드
커널 버전을 확인하고 업스트림 CVE 패치 적용 여부 확인. 취약한 버전은 adis->ops에 대한 NULL 체크가 없음.
grep -E 'if.*adis->ops' /lib/modules/$(uname -r)/kernel/drivers/iio/imu/adis*.o 2>/dev/null || echo 'Check kernel version with: uname -r'