CVE-2026-64418 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 27.

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

mm: shrinker: 확장(shrinker_info)과 관련된 shrinker_info 정리 시점의 경쟁 조건(race condition) 수정

expand_shrinker_info() 함수는 shrinker_mutex 하에 모든 가시적인 memcg를 순회하며, 아직 ->css_online() 완료되지 않은 memcg도 포함합니다.

pn->shrinker_info가 게시(published)된 후, 해당 memcg가 완전히 온라인 상태가 되거나 더 이상 순회에 보이지 않게 될 때까지 정리(teardown) 작업은 expand_shrinker_info()와 직렬화(serialized)되어야 합니다. 현재 alloc_shrinker_info() 함수는 부분적으로 초기화된 shrinker_info 배열을 해제하기 전에 shrinker_mutex를 해제함으로써 이 규칙을 위반하며, 이는 다음과 같은 경쟁 조건(race condition)을 유발할 수 있습니다:

CPU0 CPU1 ==== ====

css_create --> list_add_tail_rcu(&css->sibling, &parent_css->children); online_css --> mem_cgroup_css_online --> alloc_shrinker_info --> node0 정보 할당 rcu_assign_pointer(C->node0->shrinker_info, old0) node1 정보 할당 -> 실패(err로 이동) mutex_unlock(shrinker_mutex)

shrinker_alloc() --> shrinker_memcg_alloc --> mutex_lock(shrinker_mutex) expand_shrinker_info --> mem_cgroup_iter가 해당 memcg를 확인함 expand_one_shrinker_info old0 = C->node0->shrinker_info memcpy(new->unit, old0->unit, ...);

free_shrinker_info --> kvfree(old0);

/* 이중 해제(double free) 발생 !! */ kvfree_rcu(old0, rcu);

동일한 문제는 mem_cgroup_css_online() 함수 내에서도 발생합니다. alloc_shrinker_info()는 성공하지만 이후 objcg 할당이 실패하는 경우, free_objcg -> free_shrinker_info() 언와인드(unwind) 경로가 shrinker_mutex 없이 이미 게시된 pn->shrinker_info 배열을 정리합니다. expand_one_shrinker_info() 함수는 이와 동일한 방식으로 해당 정리 작업과 경쟁하여 old0에 대한 use-after-free 또는 double-free를 초래할 수 있습니다.

이 문제를 해결하기 위해 shrinker_info 정리를 shrinker_mutex와 직렬화하고, alloc_shrinker_info()의 오류 처리 및 cleanup 로직을 잠금(lock) 섹션 내에 유지합니다.

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

책임이 있는

Linux

예약하다

2026. 07. 19.

모더레이션

수락

항목

VDB-383223

EPSS

0.00125

출처

Are you interested in using VulDB?

Download the whitepaper to learn more about our service!