CVE-2026-64579 in Linux
要約
〜によって VulDB • 2026年08月05日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
xfrm: policy: xfrm_hash_rebuild再挿入前に不正確な(bin)バケットを事前に確保する
xfrm_hash_rebuild()の最初のループは、再挿入ループが必要とするbin/チェーンを事前に確保するため、再挿入処理(hlist_del_rcu()の後)において割り当てや失敗が発生し得ません。しかし、そのガード条件が逆転しています:これはprefixlen < thresholdを持つポリシーをスキップし、残りのものに対して事前確保を行います。
prefixlen < thresholdはまさにpolicy_hash_bysel()がNULLを返すタイミングであり、再挿入処理ではxfrm_policy_inexact_insert()パス(割り当てを行う)が取られます。そのため、ループは正確な(exact)ポリシー(これらは決して割り当てを行わない)に対して事前確保を行い、不正確(inexact)なものをスキップします。その結果、bin/nodeの割り当てが再挿入時にGFP_ATOMICで行われます。失敗した場合のエラーパスではWARN_ONCE()を発行して継続するため、ポイズンされたbydstノードが残ります。次のrebuild時のhlist_del_rcu()はLIST_POISON2をデリファレンスし、GPF(General Protection Fault)を引き起こします。これはメモリ圧力下で到達可能であり、failslabを用いて決定論的に再現可能です。
ガード条件を逆転させ、事前確保が再挿入されるポリシーに対して正確にカバーされるようにしました。これにより、再挿入処理では何も割り当てられず、失敗し得なくなります。
クラッシュ情報: Oops: general protection fault, probably for non-canonical address 0xfbd59c0000000024: 0000 [#1] SMP KASAN NOPTI
KASAN: maybe wild-memory-access in range [0xdead...]
... Workqueue: events xfrm_hash_rebuild RIP: 0010:xfrm_hash_rebuild+0x5b3/0x1190 RAX: dead000000000122 (LIST_POISON2 + offset) ... Call Trace: hlist_del_rcu (include/linux/rculist.h:599) xfrm_hash_rebuild (net/xfrm/xfrm_policy.c:1365) process_one_work (kernel/workqueue.c:3322) worker_thread (kernel/workqueue.c:3486) kthread (kernel/kthread.c:436) ret_from_fork (arch/x86/kernel/process.c:158) ret_from_fork_asm (arch/x86/entry/entry_64.S:245) ... Kernel panic - not syncing: Fatal exception in interrupt
If you want to get best quality of vulnerability data, you may have to visit VulDB.