CVE-2026-80766 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
HID: uclogic - remove 시 inrange_timer의 use-after-free 수정
uclogic_remove()는 펜 인레인지 타이머를 취소한 후 장치를 중지합니다:
timer_delete_sync(&drvdata->inrange_timer); hid_hw_stop(hdev);
timer_delete_sync()은 해당 순간에 타이머가 유휴 상태임을 보장할 뿐입니다. uclogic_raw_event_pen()는 hid_hw_stop()이 몇 줄 아래에서 전송을 중지하기 전까지 펜 보고를 계속 전달하며, pen->inrange == UCLOGIC_PARAMS_PEN_INRANGE_NONE인 모든 보고는 타이머를 다시 활성화합니다:
mod_timer(&drvdata->inrange_timer, jiffies + msecs_to_jiffies(100));
timer_delete_sync() 호출과 hid_hw_stop() 내의 전송 정리 사이에 도착하는 한 번의 보고가 취소된 후 inrange_timer를 재활성화합니다. 그 후 uclogic_remove()는 반환하고 devm drvdata가 해제되지만, hid_hw_stop()은 이미 drvdata->pen_input이 가리키는 입력 장치를 해제했으므로, 약 100ms 후에 타이머가 발동할 때 uclogic_inrange_timeout()이 해제된 메모리를 역참조합니다. 이는 타이머 softirq 컨텍스트에서의 use-after-free입니다.
두 호출의 순서를 바꾸는 것은 해결책이 아닙니다: 먼저 장치를 중지하면 hidinput_disconnect()를 통해 drvdata->pen_input이 해제되는데, 이때 타이머가 아직 대기 상태일 수 있으므로, 제거 전에 이미 활성화된 타이머가 timer_delete_sync()이 실행되기 전의 창 기간 동안 해제된 입력 장치에서 발동합니다.
대신 hid_hw_stop() 이전에 timer_shutdown_sync()를 사용하십시오. 이는 타이머를 취소하고 pen_input이 여전히 유효한 상태에서 실행 중인 콜백을 대기하며, 추가적인 재활성화를 방지합니다(비행 중인 보고로부터의 후속 mod_timer()는 묵살됨) — 따라서 hid_hw_stop()이 입력 장치를 해제하기 전에 타이머가 확실히 종료됩니다. 이는 타이머 코어에서 문서화한 "다른 경로에서 타이머가 재활성화된 경우" 정리 순서입니다.
If you want to get best quality of vulnerability data, you may have to visit VulDB.