CVE-2026-97941
mm/slab: レースを回避するため __slab_try_return_freelist() で n->list_lock を取得する
- 公開済み
- 2026/09/25
- 更新済み
- 2026/10/19
- CNA の割り当て
- Linux
- 観察された証拠
- 2026/11/04
プライマリ CVSS
nvd · CVSS 3.1
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H低 · 今後 30 日間
- パーセンタイル
- 6.8%
- モデルの日付
- 2026/11/04
EPSS は統計的な推定値であり、確実性や影響の尺度ではありません。 CVSS、KEV ステータス、暴露、環境と組み合わせます。
概要
Linuxカーネルにおいて、以下の脆弱性が修正されました: mm/slab: 競合を回避するため __slab_try_return_freelist() で n->list_lock を取得する。コミット ba7425312607 (「mm, slab: 楽観的な __slab_try_return_freelist() を追加」) は、slab->freelist が NULL であり cmpxchg が成功する限り、誰も slab にオブジェクトを解放していないと誤って想定していました。しかし、Hyunwoo Kim 氏が報告したように [1]、他の CPU が slab にオブジェクトを解放し、その slab を partial リストに挿入し、その後 slab からオブジェクトを割り当てて、n->list_lock の下でリストから slab を削除している最中である可能性があります。__refill_objects_node() は n->list_lock の外で slab を pc.slabs に戻すため、slab が同時に n->partial から削除されている間に、そのリストへ slab を挿入してしまう可能性があります。これによりリスト破損が発生しました [1]: list_add corruption. next->prev should be prev (ffff888100000248), but was dead000000000122. (next=ffffea000416e410). kernel BUG at lib/list_debug.c:29! Oops: invalid opcode: 0000 [#1] SMP NOPTI CPU: 1 UID: 65534 PID: 144 Comm: poc Not tainted 7.2.0-16172-gcf72cbb39da8-dirty #1 PREEMPT(lazy) RIP: 0010:__list_add_valid_or_report+0x80/0xd0 ... Call Trace: alloc_from_new_slab+0x183/0x300 ___slab_alloc+0x31c/0x890 __kmalloc_noprof+0x3d4/0x800 lsm_blob_alloc+0x2d/0x50 security_msg_msg_alloc+0x26/0x90 load_msg+0x1aa/0x210 do_msgsnd+0x91/0x800 do_syscall_64+0x109/0x5d0 entry_SYSCALL_64_after_hwframe+0x77/0x7f ... Kernel panic - not syncing: Fatal exception これは典型的な ABA 問題であり、cmpxchg は成功しますが、__refill_objects_node() が slab から freelist を取得して以降に状態が変化しています。Vlastimil Babka 氏が述べたように [2]、get_partial_node_bulk() における slab->counters の競合読み取りにより、複数の slab を返すことは稀であるはずです。したがって、追加の複雑さを導入する代わりに、最悪の場合でも n->list_lock を 2 回取得および解放します。slab を直接 partial リストに戻し、cmpxchg と add_partial() にわたって n->list_lock を保持します。これはコミット ba7425312607 の初期バージョン [3] と同様です。リスト操作が n->list_lock によって直列化されるため、これで競合を回避するのに十分です。ついでに、条件が unlikely になったため、unlikely() ヒントを復活させます。
ソース
CVE-2026-97941(SLABサブシステムのカーネル脆弱性)の公式PoCをARM64 Androidへ移植したもので、7.0/7.2カーネル向けにレースタイミングとヒープレイアウトを移植済みです。
責任ある使用
脆弱性情報は、自分が所有しているシステム、またはテストを許可されているシステムでのみ使用してください。 Kitploit は公開研究メタデータにリンクしており、エクスプロイト コードや悪意のあるペイロードは保存しません。