CVE-2026-98920 in Linux
요약
\~에 의해 VulDB • 2026. 10. 23.
리눅스 커널에서 다음 취약점이 해결되었습니다:
netfs: 직접 메모리 풀(mempool) 할당에 대한 누락된 alloc tagging 수정
커밋 1d78d56c43ef("netfs: mempool 추가를 통해 writeback 중 folio_queue ENOMEM 오류 수정")은 folio_queues용 mempool을 추가하고, request, subrequest 및 folio_queue 할당에서 writeback과 그 외의 경우를 구분하도록 했습니다. Writeback은 메모리 회수(memory reclaim)의 일부이므로 ENOMEM으로 인해 실패해서는 안 되며, 따라서 mempool_alloc()을 통해 GFP_NOFS 하에 할당됩니다. 이는 풀의 reserve를 소모할 수 있으며, reserve가 고갈되면 요소가 반환될 때까지 대기합니다. 호출자에게 -ENOMEM을 반환할 수 있는 GFP_KERNEL 경로는 대신 풀의 ->alloc() 콜백을 직접 호출합니다.
그러나 이 직접 호출은 mempool_alloc() 매크로가 제공하는 alloc_hooks() 래퍼를 건너뜁니다. 풀 콜백인 mempool_alloc_slab() 및 mempool_kmalloc()는 kmem_cache_alloc_noprof()와 kmalloc_noprof()를 호출하며, 현재 프로세스의 current->alloc_tag이 호출자에 의해 설정되어 있음을 가정합니다. CONFIG_MEM_ALLOC_PROFILING_DEBUG=y 구성 시 이는 다음과 같은 결과를 초래합니다:
current->alloc_tag not set WARNING: ./include/linux/alloc_tag.h:161 at __alloc_tagging_slab_alloc_hook alloc_tag was not set WARNING: ./include/linux/alloc_tag.h:166 at __alloc_tagging_slab_free_hook
이는 각각 할당 시점과 해제(free) 시점에 보고되며, CIFS 마운트에서 파일을 읽을 때 관찰됩니다. 또한 이러한 할당은 /proc/allocinfo에서도 누락되어 있습니다.
include/linux/mempool.h의 다른 alloc_hooks() 래핑 매크로(예: mempool_alloc()) 옆에 새로운 mempool_alloc_noreserve() 헬퍼를 추가하여 직접적인 ->alloc() 호출을 alloc_hooks()으로 감쌉니다. GFP_KERNEL 경로는 실패 가능한 할당 세미antics(failable allocation semantics)를 유지하며, 이제 태그(tagging)가 적용됩니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.