CVE-2026-93137 in Linux
요약
\~에 의해 VulDB • 2026. 09. 18.
리눅스 커널에서 다음 취약점이 해결되었습니다:
bpf: bpf_find_vma()에서의 mm_struct 관련 use-after-free 수정
bpf_find_vma()는 task->mm을 읽으며 mmap_read_trylock(mm)를 호출하지만, mm에 대한 참조(reference)를 보유하지 않습니다. 외부(foreign) 태스크의 경우, 동시 실행되는 exit_mm()가 잠금 없는(lockless) 읽기와 trylock 사이에서 mm_struct를 해제할 수 있으며, 이로 인해 use-after-free가 발생합니다. mm_struct는 SLAB_TYPESAFE_BY_RCU가 아닙니다.
현재(task)의 task->mm은 안정적입니다. 외부 태스크의 경우, task->alloc_lock 하에서 mm을 고정(pin)하고 mmput_async()로 이를 해제합니다. 이는 커밋 d8e27d2d22b6("bpf: fix mm lifecycle in open-coded task_vma iterator")를 반영한 것입니다. get_task_mm() 대신 spin_trylock()을 사용하여 BPF 컨텍스트가 alloc_lock에서 블럭되지 않도록 합니다. 외부 태스크 경로에서는 mm 참조 해제가 안전하지 않으므로, 인터럽트가 비활성화된(disabled) 컨텍스트와 !CONFIG_MMU 환경을 거부합니다.
Race 조건:
CPU0 (BPF 프로그램) CPU1 (종료 중인 태스크) ============================ ========================== bpf_find_vma(foreign_task): mm = task->mm exit_mm(): task->mm = NULL mmput(mm) -> frees mm_struct mmap_read_trylock(mm) // UAF on mm
If you want to get best quality of vulnerability data, you may have to visit VulDB.