🇰🇷 한글 설명
Linux 커널의 HID i2c-hid 드라이버에서 불필요한 I2C_HID_READ_PENDING 플래그가 인터럽트 처리 중 무한 루프를 일으켜 시스템을 교착상태에 빠뜨릴 수 있습니다. RT 우선순위 인터럽트가 CPU를 점유하면서 플래그 해제 작업이 스케줄되지 못해 발생하는 문제입니다.
💡 쉬운 설명
입력장치 드라이버에서 불필요한 제어 신호가 무한 반복을 일으켜 시스템이 멈추는 버그입니다. 제어 신호를 제거하면 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
HID: i2c-hid: remove I2C_HID_READ_PENDING flag to prevent lock-up
The flag I2C_HID_READ_PENDING is used to serialize I2C operations.
However, this is not necessary, because I2C core already has its own
locking for that.
More importantly, this flag can cause a lock-up: if the flag is set in
i2c_hid_xfer() and an interrupt happens, the interrupt handler
(i2c_hid_irq) will check this flag and return immediately without doing
anything, then the interrupt handler will be invoked again in an
infinite loop.
Since interrupt handler is an RT task, it takes over the CPU and the
flag-clearing task never gets scheduled, thus we have a lock-up.
Delete this unnecessary flag.
📍 영향받는 시스템
Linux 커널 (HID i2c-hid 드라이버) - 터치패드, 터치스크린 등 I2C 기반 입력장치 사용 시스템
⚔️ 공격 벡터
로컬 서비스 거부(DoS) - 입력장치 인터럽트 트리거로 시스템 교착상태 유발
🛡️ 대응 방법
Linux 커널을 패치가 적용된 최신 버전으로 업데이트 (해당 드라이버의 I2C_HID_READ_PENDING 플래그 제거 커밋 이후)
🔧 검증 코드
I2C_HID_READ_PENDING 플래그가 없으면 패치됨, 검색 결과가 있으면 취약함
grep -r 'I2C_HID_READ_PENDING' /usr/src/linux* 2>/dev/null || echo 'Patched'