CVE-2026-80775 in Linux정보

요약

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

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

futex: 초기 mm->futex.phash.ref 할당 시 Race Condition 수정

futex_hash_allocate()는 잠금(locking) 없이 mm->futex.phash.ref를 할당합니다. 커밋 d9b05321e21e("futex: Move futex_hash_free() back to __mmput()")은 이 곳에 할당을 이동하고, 해당 시점에 프로세스에 스레드가 하나만 있다고 가정했습니다.

커밋 ee9dce44362b("futex: Drop CLONE_THREAD requirement for private default hash alloc")는 need_futex_hash_allocate_default()를 모든 CLONE_VM 복제(clone)를 포함하도록 확장했지만, 부모가 일시 중단되어 Race Condition이 발생할 수 없기 때문에 vfork는 제외했습니다.

그러나 vfork가 중첩되면 이 가정은 더 이상 성립하지 않습니다. 만약 vfork 자식이 다시 vfork를 호출한 후 SIGKILL로 종료되면, 부모는 vfork 대기에서 해제되어 같은 mm 내에서 손자 프로세스와 동시에 실행됩니다. 두 프로세스 모두 futex_hash_allocate_default()를 거치지 않았습니다.

두 프로세스가 동시에 prctl(PR_FUTEX_HASH, PR_FUTEX_HASH_SET_SLOTS)를 호출하면, 각각은 mm->futex.phash.ref이 NULL인 것을 보고 자신의 percpu 카운터를 저장합니다. 마지막에 수행된 저장만 유효하게 남습니다. 먼저 저장된 카운터는 더 이상 mm에서 접근할 수 없게 되므로, __futex_ref_atomic_end()에서는 해당 참조를 인식하지 못합니다. 그러면 여전히 참조가 남아 있는 개인 해시(private hash)가 죽은 것으로 간주되어 해제되고, 그 중 하나의 버킷을 아직 보유하고 있는 태스크는 futex_q_lock()에서 해제된 메모리에 기록하게 됩니다.

카운터는 cmpxchg()로 한 번만 저장하고, 실패한 쪽에서는 free_percpu()를 통해 자신의 카운터를 해제합니다. 초기 참조(counter가 0인 상태) 동안 다른 태스크가 개인 해시를 설치할 수 있으므로, 저장 전에 반드시 초기 참조를 획득해야 합니다.

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 08. 26.

모더레이션

수락

항목

VDB-398926

EPSS

0.00168

출처

Interested in the pricing of exploits?

See the underground prices here!