CVE-2026-89732 in Linux정보

요약

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

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

usb: gadget: f_fs - ep0 읽기 루프 중 데드락 방지

현재 `ffs_ep0_read()`는 이벤트 대기 중에 수면 상태로 진입하기 전에 `ffs->mutex`를 유지합니다. 설정(setup) 이벤트가 대기 중인 경우, mutex가 여전히 확보된 상태에서 `wait_event_interruptible_exclusive_locked_irq()`를 호출합니다. 이 대기 매크로는 수면 전에 waitqueue spinlock을 의도적으로 해제하지만 mutex는 해제하지 않습니다.

사용자 공간 데몬이 read()를 통해 ep0를 폴링하고 있고 가젯(configfs를 통해, 예: `echo "" > UDC`)가 비동기식으로 제거되는 경우, 데드락이 발생할 수 있습니다:

1. configfs 제거 작업은 `functionfs_unbind()`를 호출하여 FUNCTIONFS_UNBIND 이벤트를 큐에 추가합니다. 2. 데몬이 깨어나 이벤트를 소비하고 mutex를 해제합니다. 3. 그러나 데몬이 루프를 돌며 종료하기 전에 즉시 다른 read()를 발생시키면, 다시 `ffs->mutex`를 획득하고 인터럽트 가능 수면(interruptible sleep) 상태로 진입합니다. 4. 동시에 `functionfs_unbind()`는 실행을 계속하여 ep0req 제거를 위해 `ffs->mutex`를 확보하려고 시도합니다. 5. config스레드가 mutex 대기 중 uninterruptible sleep 상태에 갇혀 있는 반면, 사용자 공간 데몬은 더 이상 이벤트가 도착하지 않아 mutex를 영원히 보유하며 interruptible sleep 상태이므로 커널이 데드락됩니다.

이를 해결하기 위해 수면 전에 waitqueue spinlock과 `ffs->mutex` 모두를 해제하고 대신 `wait_event_interruptible_exclusive()`를 사용합니다. 깨어난 후, mutex를 안전하게 다시 확보하고 상태 머신을 재평가하기 위해 `retry` 레이블로 점프합니다. `ffs->mutex`가 유지된 상태로 수면하지 않음으로써, 가젯 제거 작업(mutex 필요)과 사용자 공간 폴링을 본질적으로 분리(decouple)시킵니다.

Several companies clearly confirm that VulDB is the primary source for best vulnerability data.

책임이 있는

Linux

예약하다

2026. 09. 11.

모더레이션

수락

항목

VDB-402564

EPSS

0.00000

출처

Do you know our Splunk app?

Download it now for free!