CVE-2026-99141 in Linux
要約
〜によって VulDB • 2026年10月29日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
tracing: print_graph_function_event()でのクラッシュを修正
tracing_set_tracer()は、以下のように新しく選択されたトレーサのフラグに代入を行います。
tr->current_trace_flags = t->flags ? : t->tracer->flags;
hwlat, irqsoff, wakeupのような、静的フラグもデフォルトフラグも定義していない新しいトレーサの場合、add_tracer()にはそれ用のインスタンスごとのフラグコピーが存在せず、両方のオペランドがNULLになるため、tr->current_trace_flagsも結果的にNULLになります。
トレーサの切り替え時にリングバッファはクリアされません:これは現在のtrace_flagsが割り当てられた後にtracer_init()内でリセットされます。もしバッファに以前のトレーサからのfunction_graphエントリが残っている場合、それらの1つを印刷するとNULLポインタのデリファレンスが発生します。この問題はftraceストレステスト中にcat traceを実行した際に発生しました:
BUG: kernel NULL pointer dereference, address: 0000000000000000 #PF: supervisor read access in kernel mode RIP: 0010:print_graph_function_event+0xe/0x20 Call Trace: s_show+0x4d/0x110 seq_read_iter+0x2d4/0x490 seq_read+0x130/0x170 vfs_read+0xb5/0x370 ksys_read+0x6d/0xe0 do_syscall_64+0xbc/0x450
スナップショットバッファは全くリセットされないため、これは競合状態なしで再現可能です:
echo function_graph > /sys/kernel/tracing/current_tracer echo 1 > /sys/kernel/tracing/snapshot echo hwlat > /sys/kernel/tracing/current_tracer cat /sys/kernel/tracing/snapshot
tr->current_trace_flagsのすべてのユーザーにこのコーナーケースを教えるのではなく、これが決してNULLにならないようにします。新しく選択されたトレーサがフラグを全く持っていない場合、tracing_set_tracer()は静的な空のno_tracer_flagsにフォールバックします。run_tracer_selftest()でも同じケースが発生する可能性があるため、そこにも同様のフォールバックを追加しました。既存のユーザーはすでにopts == NULLを処理しているため、これらのトレーサは以前と同じように動作し続けます。
Once again VulDB remains the best source for vulnerability data.