🇰🇷 한글 설명
Linux 커널의 hwmon(powerz) 드라이버에서 신호 인터럽트 발생 시 usb_kill_urb()가 호출되지 않는 취약점이 발견되었습니다. 이로 인해 데이터가 수신되지 않은 상태에서 전송 버퍼를 읽게 되어 잘못된 데이터를 참조할 수 있습니다.
💡 쉬운 설명
USB 장치와 통신 중에 갑작스러운 신호가 들어오면, 장치와의 연결을 제대로 끊지 않고 비어있는 데이터를 읽으려 시도하는 문제입니다. 이로 인해 시스템이 잘못된 정보를 처리하거나 오작동할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
hwmon: (powerz) Fix missing usb_kill_urb() on signal interrupt
wait_for_completion_interruptible_timeout() returns -ERESTARTSYS when
interrupted. This needs to abort the URB and return an error. No data
has been received from the device so any reads from the transfer
buffer are invalid.
The original code tests !ret, which only catches the timeout case (0).
On signal delivery (-ERESTARTSYS), !ret is false so the function skips
usb_kill_urb() and falls through to read from the unfilled transfer
buffer.
Fix by capturing the return value into a long (matching the function
return type) and handling signal (negative) and timeout (zero) cases
with separate checks that both call usb_kill_urb() before returning.
📍 영향받는 시스템
Linux kernel (hwmon/powerz driver 포함 버전)
⚔️ 공격 벡터
USB 장치 통신 중 신호 인터럽트를 유도하여 잘못된 버퍼 데이터 읽기 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인