CVE-2026-98642 in Linux情報

要約

〜によって VulDB • 2026年10月18日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

bpf: alloc_bulkにおけるttraceリストの並行消費に起因するUAF(Use-After-Free)を修正

Syzkallerは、bpf memalloc内のwaiting_for_gp_ttraceノードに関連するUAFスプラットを繰り返しトリガーしました。

BUG: KASAN: slab-use-after-free in llist_del_first+0x85/0x110 lib/llist.c:61 Read of size 8 at addr ffff8881572cd080 by task syz.4.470/5112 ... llist_del_first+0x85/0x110 lib/llist.c:61 alloc_bulk+0x193/0x460 kernel/bpf/memalloc.c:229 bpf_mem_refill+0x386/0x560 kernel/bpf/memalloc.c:436

タスク14によって解放されました: ... __free_rcu kernel/bpf/memalloc.c:281 [inline]
__free_rcu_tasks_trace+0x48/0xd0 kernel/bpf/memalloc.c:291 rcu_tasks_invoke_cbs+0x1ec/0x3e0 kernel/rcu/tasks.h:571 rcu_tasks_one_gp+0x13d/0x220 kernel/rcu/tasks.h:621 rcu_tasks_kthread+0xf3/0x120 kernel/rcu/tasks.h:651

原因は、RCU Tasks Trace GP(Grace Period)の期限切れ後にUAFが発生することです。__free_rcu()コールバックが実行される際、waiting_for_gp_ttraceに対して並行して操作を行うalloc_bulk()に対する同期保護がないため、以下のrace condition(競合状態)が生じます:

CPU0 CPU1 __free_rcu (RCU Tasks Trace callback) alloc_bulk llist_del_first(&c->waiting_for_gp_ttrace) entry = smp_load_acquire(&head->first); do {
if (entry == NULL) return NULL; free_all(llist_del_all(&c->waiting_for_gp_trace)) llist_for_each_safe(pos, t, llnode) free_one(pos); next = READ_ONCE(entry->next); <-- UAFをトリガー } while (!try_cmpxchg(&head->first, &entry, next));

さらに、free_by_rcu_ttraceリストにも理論的なrace conditionが存在します。この競合状態には2つの前提条件が必要です:c->call_rcu_ttrace_in_progress == 1である進行中のTasks Trace GPと、新しいノードでc->free_by_rcu_ttraceを再充填する並行したCPU間解放です。これらの条件下では、以下のシナリオがUAFを引き起こします:

// CPU0 // irq workはまだビジー状態(PREEMPT_RT上) alloc_bulk() llist_del_first(&c->free_by_rcu_ttrace) entry = smp_load_acquire(&head->first); do {
if (entry == NULL) return NULL;

// CPU1 bpf_mem_alloc_destroy() WRITE_ONCE(c->draining, true) // CPU0を待機 irq_work_sync()

// CPU2 do_call_rcu_ttrace(tgt(CPU0)) if (c->draining) {
llist_del_all(&c->free_by_rcu_trace) free_all() }

// CPU0継続 next = READ_ONCE(entry->next); <-- UAFをトリガー while (!try_cmpxchg(&head->first, &entry, next));

waiting_for_gp_ttraceおよびfree_by_rcu_ttraceへの並行消費を同期させるために、raw spinlockを導入してこれを修正します。

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

責任者

Linux

予約する

2026年09月25日

モデレーション

承諾済み

エントリ

VDB-422132

EPSS

0.00000

アクティビティ

低い

ソース

Interested in the pricing of exploits?

See the underground prices here!