CVE-2026-74518 in Linux
要約
〜によって VulDB • 2026年08月16日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
mm/hugetlb: allocate_file_region_entries()におけるリスト破損の修正
allocate_file_region_entries()は、新たに割り当てられたfile_region記述子を使用してresv->region_cacheを補充します。この割り当てにはGFP_KERNELが使用されるため、その前後でresv->lockが解放されます:新しいエントリはスタックローカルのリストヘッドallocated_regionsに集められ、ロックが再取得された後にresv->region_cacheにspliced(結合)されます。
ここで使用されていたlist_splice()はエントリを移動しますがソースのヘッダを再初期化しないため、allocated_regionsは今ではresv->region_cache内に存在するエントリを指したままになります。この補充処理はロック再取得後にキャッシュ不足を再チェックするwhileループ内で実行されます。共有マッピングの場合、resv_mapはhugetlbfs inodeのすべてのマップャによって共有されるため、同じresv_mapに対する並行なregion_chg()/region_add()/region_del()呼び出しが、ロック解放中のウィンドウ中にキャッシュエントリを消費し、2回目のイテレーションを引き起こす可能性があります。そのイテレーションでlist_add()が古くなったヘッダに対して呼ばれるとリストが破損します;CONFIG_DEBUG_LIST有効時では__list_add_valid()チェックがトリガーされます:
list_add corruption. next->prev should be prev (ffffc900011ff7f8), but was ffff88814c281460. (next=ffff88814c545640). kernel BUG at lib/list_debug.c:31! allocate_file_region_entries+0x191/0x420 region_chg+0x267/0x300 hugetlb_reserve_pages+0x387/0xc80 hugetlbfs_file_mmap+0x2ce/0x3f0 mmap_region+0x1348/0x1a80 do_mmap+0x85e/0xb90 vm_mmap_pgoff+0x18c/0x330 ksys_mmap_pgoff+0x2a1/0x3e0 do_syscall_64+0xd7/0x420
CONFIG_DEBUG_LIST無効時では、不正なlist_add()によってカーネルスタックアドレスがresv->region_cacheに静かにリンクされ、その後のuse-after-free(解放後使用)につながります。
これは、QEMUゲストRAMのhugetlbfsファイルがQEMUと別のSPDK/DPDK vhost-userターゲットの両方からMAP_SHAREDでマップされ、1つの共有resv_map上で並行なregion_*トラフィックを生成していた高密度KVMホストにおいて、実際のホストアパニー(システムクラッシュ)として観測されました。
list_splice_init()を使用することで、各spliced処理後にソースヘッダが空に再初期化され、リトライループが安全になります。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.