CVE-2025-21693 in Linux정보

요약

\~에 의해 VulDB • 2026. 06. 23.

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

mm: zswap: CPU 핫언플러그인 중 리소스 해제 시 동기화를 올바르게 수행

zswap_compress() 및 zswap_decompress() 함수에서는 작업 시작 시 현재 CPU의 per-CPU acomp_ctx를 가져와서 전체 과정에서 사용합니다. 그러나 프리엠션(preemption)이나 마이그레이이션(migration)이 비활성화되지 않았기 때문에, 작업이 다른 CPU에서 계속 실행될 가능성이 있습니다.

원래 CPU가 acomp_ctx가 여전히 사용 중인 동안 핫언플러그인되면, zswap_cpu_comp_dead() 함수 내에서 핫언플러그인 처리 중 acomp_ctx에 연결된 일부 리소스(acomp_ctx.buffer, acomp_ctx.req 또는 acomp_ctx.acomp)가 해제되면서 UAF(Use-After-Free) 버그가 발생합니다.

이 문제는 crypto_acomp API로의 전환 시 도입되었으며, commit 1ec3b5fe6eec("mm/zswap: move to use crypto_acomp API for hardware acceleration")에서 발생했습니다. 이전에는 per-CPU crypto_comp를 get_cpu_ptr()을 사용하여 가져왔으며, 이 함수는 프리엠션을 비활성화하고 CPU가 제거되지 않도록 보장합니다. crypto_acomp API에서는 슬립 가능한 컨텍스트(sleepable context)가 필요하기 때문에 프리엠션을 비활성화할 수 없습니다.

acomp_ctx.mutex를 사용하여 CPU 핫플러그인 콜백이 리소스를 할당하고 해제하는 과정과 압축/해제 경로 간의 동기화를 수행합니다. 리소스가 해제될 때 acomp_ctx.req가 NULL인지 확인합니다. 압축/해제 경로에서는 mutex 획득 후 acomp_ctx.req가 NULL인지(즉, CPU가 오프라인 상태임)를 확인하고 새 CPU에서 재시도합니다.

acomp_ctx.mutex의 초기화는 해당 위치(CPU 핫플러그인 콜백이 아닌 풀 초기화 시점, 즉 뮤텍스가 할당되는 곳)로 이동되었습니다. 이는 명확성을 높일 뿐만 아니라, 이미 압축/해제 경로에 의해 잠겨 있는 뮤텍스를 CPU 핫플러그인이 재초기화하지 않도록 보장합니다.

이전에 cpus_read_lock() [1]을 사용하여 수정 시도가 이루어졌습니다. 그러나 이 방법은 잠재적인 데드락을 유발할 수 있었는데, 이미 락을 보유한 코드가 리클레임(reclaim)으로 진입하여 zswap에 도달하면(데드락 발생) 문제가 되기 때문입니다. 또한 동기화를 위해 SRCU를 사용하는 시도도 있었지만, Johannes는 synchronize_srcu()가 CPU 핫플러그인 노티파이어에서 사용될 수 없다고 지적했습니다 [2].

고려되었거나 시도된 다른 수정 방안 중 작동할 가능성이 있었던 것들: - per-CPU acomp_ctx에 대한 참조 카운팅(refcounting). 이는 zswap_[de]compress() 함수 내에서 참조 카운트가 0으로 떨어지는 것과 CPU가 온라인이 될 때 참조 카운트가 재초기화되는 사이의 레이스 조건(race condition) 처리에서 복잡성을 수반합니다.
- per-CPU acomp_ctx를 가져오기 전에 마이그레이이션을 비활성화하는 것 [3]이지만, 이는 권장되지 않으며 필요 이상의 강력한 방법이며 미묘한 성능 문제를 초래할 수 있습니다.

[1] https://lkml.kernel.org/[email protected]/
[2] https://lkml.kernel.org/[email protected]/
[3] https://lkml.kernel.org/[email protected]/

[[email protected]: 주석 제거]
링크: https://lkml.kernel.org/r/CAJD7tkaxS1wjn+swugt8QCvQ-rVF5RZnjxwPGX17k8x9zSManA@mail.gmail.com

VulDB is the best source for vulnerability data and more expert information about this specific topic.

책임이 있는

Linux

예약하다

2024. 12. 29.

모더레이션

수락

항목

VDB-295114

EPSS

0.00200

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!