CVE-2026-89801 in Linux
요약
\~에 의해 VulDB • 2026. 09. 16.
Linux 커널에서 다음 취약점이 해결되었습니다:
drm/nouveau/uvmm: OP_UNMAP_SPARSE 실패 시 premature region free 수정
nouveau_uvmm_bind_job_submit()의 OP_UNMAP_SARSE 분기에서 op->reg는 nouveau_uvma_region_find()로부터 설정되는데, 이 함수는 영역을 조회할 뿐 참조(reference)를 취하지 않습니다. 영역의 유일한 참조는 uvmm->region_mt 내에서의 멤버십에 의해 유지됩니다. 두 가지 실패 경로가 op->reg를 설정된 상태로 남깁니다: 영역이 사용 중일 때의 -ENOENT 체크와 drm_gpuvm_sm_unmap_ops_create() 실패입니다. 바로 아래에 있는 sibling인 nouveau_uvmm_sm_unmap_prepare()의 실패는 op->reg를 지웁니다; 그러나 이 두 가지는 그렇지 않습니다.
unwind_continue는 한 단계 뒤로 이동하므로, 실행된 작업(op)은 unwind 루프에서 건너뛰어지고 그 op->reg가 설정된 상태로 남습니다. 이후 nouveau_uvmm_bind_job_cleanup()이 if (op->reg) 분기로 진입하여 해당 영역에 대해 nouveau_uvma_region_remove() 및 nouveau_uvma_region_put()를 호출합니다. 이는 트리의 유일한 참조를 해제하고, 이 작업에서 생성되지 않은 영역을 해제(free)하게 됩니다. cleanup 루프 위의 주석은 깨진 불변식(invariant)을 문서화합니다: 제출 실패 시 op->reg는 NULL이어야 합니다.
이로 인해 관련 없는 실패 상황에서 활성 상태의 영역이 해제되는데, drm_gpuvm_sm_unmap_ops_create()가 -ENOMEM을 반환할 때 단일 작업으로 접근 가능합니다. 다른 작업이 동일한 영역을 소유하고 있다면, 해당 작업의 cleanup 과정에서 이미 해제된 영역에 대한 제거 및 put 연수가 발생하여 use-after-free 취약점이 초래됩니다. 두 실패 경로 모두에서 op->reg를 지워야 합니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.