CVE-2026-89738 in Linux정보

요약

\~에 의해 VulDB • 2026. 09. 12.

리눅스 커널에서 다음 취약점이 해결되었습니다:

usb: gadget: at91_udc: udc가 해제되기 전에 폴링-VBUS 타이머/작업을 비웁니다

폴링-VBUS 모드(board.vbus_pin && board.vbus_polled)에서는 probe 시 self-restarting 사이클이 설정됩니다. 즉, at91_vbus_timer()는 vbus_timer_work를 스케줄링하고, at91_vbus_timer_work()은 at91_vbs_update()를 호출한 후 mod_timer()를 통해 타이머를 다시 아ーム합니다. 둘 다 container_of를 사용하여 동일한 udc를 복원하며, 모든 반복마다 이를 역참조(dereference)합니다.

어떤 teardown 경로에서도 이 사이클을 취소하지 않습니다. udc는 devm으로 할당되므로 at91udc_remove()가 반환한 후 해제되며, probe 실패 시 devres가 실행될 때도 마찬가지로 해제됩니다. 이러한 지점에서 대기 중이거나 실행 중인 타이머 콜백이나 작업 항목은 해제된 udc를 역참조합니다.

at91_udc_shutdown_vbus_timer()를 추가하고 이를 at91udc_remove() 및 probe 내 usb_add_gadget_udc()의 실패 경로에서 호출합니다. 나머지 probe 오류 경로는 타이머가 아ーム되기 전에 실패합니다. timer_shutdown_sync()는 실행 중인 콜백을 대기하고 timer->function을 지워, 작업 핸들러의 mod_timer()를 영구적인 무작위(no-op)로 만듭니다. 그런 다음 cancel_work_sync()는 재아름 시도가 더 이상 효과를 발휘하지 않는 모든 대기 중이거나 실행 중인 작업을 비웁니다. 타이머가 먼저 종료되어야 하는데, 이는 작업만 취소하면 타이머가 이를 다시 큐에 넣을 수 있기 때문입니다. 이 가드(guard)는 probe를 반영한 것으로, IRQ 모드에서는 타이머와 work_struct가 초기화되지 않습니다.

이 문제는 고장(fault)을 필요로 하지 않으며, 일반적인 드라이버 언바인딩은 이미 큐에 있는 작업 항목과 교차할 수 있습니다.

이 이슈는 사내 정적 분석 도구(static analysis tool)를 통해 발견되었습니다.

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 11.

모더레이션

수락

항목

VDB-402587

EPSS

0.00000

출처

Want to know what is going to be exploited?

We predict KEV entries!