🇰🇷 한글 설명
Linux 커널의 bno055 IMU 드라이버에서 hw_xlate 배열을 순회할 때 hw_xlate 배열의 길이 대신 vals 배열의 길이를 사용하여 메모리 경계 초과(OOB) 접근이 발생하는 취약점입니다. 특히 bno055_gyr_scale에서 vals 배열이 hw_xlate보다 크기 때문에 의도하지 않은 메모리 영역에 접근할 수 있습니다.
💡 쉬운 설명
Linux 센서 드라이버가 데이터를 찾을 때 배열의 끝 위치를 잘못 계산하여 할당된 메모리 범위를 벗어난 영역에 접근합니다. 실제로는 대부분 먼저 데이터를 찾아서 루프를 종료하므로 실제 피해 가능성은 낮습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
iio: imu: bno055: fix OOB access of hw_xlate array
Fix a potential out-of-bounds array access of the hw_xlate array in
bno055.c.
In bno055_get_regmask(), hw_xlate was iterated over the length of the
vals array instead of the length of the hw_xlate array. In the case of
bno055_gyr_scale, the vals array is larger than the hw_xlate array,
so this could result in an out-of-bounds access. In practice, this
shouldn't happen though because a match should always be found which
breaks out of the for loop before it iterates beyond the end of the
hw_xlate array.
By adding a new hw_xlate_len field to the bno055_sysfs_attr, we can be
sure we are iterating over the correct length.
📍 영향받는 시스템
Linux 커널 bno055 IMU 드라이버 (drivers/iio/imu/bno055.c)
⚔️ 공격 벡터
로컬 사용자가 bno055 sysfs 인터페이스를 통해 gyr_scale 속성 조회
🛡️ 대응 방법
hw_xlate_len 필드를 bno055_sysfs_attr 구조체에 추가하여 각 속성마다 올바른 배열 길이로 반복하도록 커널 업데이트 적용
🔧 검증 코드
결과가 0보다 크면 패치됨, 0이면 미패치된 버전입니다.
grep -n 'hw_xlate_len' /lib/modules/$(uname -r)/build/drivers/iio/imu/bno055.c 2>/dev/null | wc -l