JVNDB-2026-012904 | |
LinuxのLinux Kernelにおける競合状態に関する脆弱性 | |
| 概要 | |
Linuxカーネルにおいて、以下の脆弱性が修正されました。bpf: PREEMPT_RT環境下のcpumapにおける競合状態を修正しました。PREEMPT_RTカーネルでは、CPUごとのxdp_bulk_queue (bq)が同一CPU上の複数のプリエンプト可能なタスクから同時にアクセスされうる状況が存在していました。元のコードは、同一CPU上でbq_enqueue()と__cpu_map_flush()が原子的に実行されると仮定し、プリエンプションを防ぐためにlocal_bh_disable()に依存していました。しかしPREEMPT_RTでは、local_bh_disable()はPREEMPT_RT_NEEDS_BH_LOCKが設定されていない場合migrate_disable()のみを呼び出し、プリエンプションを無効化しません。これにより、bq_flush_to_queue()の実行中にCFSスケジューラがタスクをプリエンプトし、同一CPU上で別のタスクがbq_enqueue()に入り、同一のCPUローカルbqに同時アクセスが可能となりました。このことにより、以下の競合が発生しました。1. __list_del_clearprev()の二重呼び出し:bq_flush_to_queue()でbq-countがリセットされた後、プリエンプトされたタスクがbq_enqueue()およびbq_flush_to_queue()を呼び出し、bq-countがCPU_MAP_BULK_SIZEに達した際に両タスクが同一bq-flush_nodeに対して__list_del_clearprev()を呼びます。2度目の呼び出しでは既にNULLに設定されたprevポインタをデリファレンスし、クラッシュを引き起こしました。2. bq-countおよびbq-q[]の競合:同時実行されるbq_enqueue()によってパケットキューがbq_flush_to_queue()処理中に破損する可能性があります。タスクA(__cpu_map_flush - bq_flush_to_queue)とタスクB(bq_enqueue - bq_flush_to_queue)の同一CPU上での競合状態の流れは以下の通りです。 Task A (xdp_do_flush) Task B (cpu_map_enqueue)---------------------- ------------------------bq_flush_to_queue(bq) spin_lock(&q-producer_lock) /* bq-q[]をptr_ringへフラッシュ */ bq-count = 0 spin_unlock(&q-producer_lock) bq_enqueue(rcpu, xdpf) -- CFSプリエンプトでTask A中断 -- bq-q[bq-count++] = xdpf /* ...多数enqueue処理... */ bq_flush_to_queue(bq) spin_lock(&q-producer_lock) /* ptr_ringへフラッシュ */ spin_unlock(&q-producer_lock) __list_del_clearprev(flush_node) /* flush_node.prevをNULLに設定 */ -- Task A再開 -- __list_del_clearprev(flush_node) flush_node.prev-next = ... /* prevがNULLのためカーネルoops発生 */これらの問題を修正するために、xdp_bulk_queueにlocal_lock_tを追加し、bq_enqueue()と__cpu_map_flush()内でロック取得を行います。これらの処理はlocal_bh_disable()の下で既に動作しているため、non-RTではオーバーヘッドのない注釈的意味を持ち、PREEMPT_RTでは同一CPU内でのスリーピングロックとして動作し、bqへのアクセスを直列化するlocal_lock_nested_bh()を使用します。再現手順としては、bq_flush_to_queue()のbq-count = 0と__list_del_clearprev()の間にmdelay(100)を挿入し、syzkaller提供のリプロデューサを実行してください。 | |
| CVSS による深刻度 (CVSS とは?) | |
|
CVSS v3 による深刻度
基本値: 4.7 (警告) [NVD値]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
|
| |
| 想定される影響 | |
当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。 | |
| 対策 | |
リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
|
| |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/03/25 |
| 登録日 | 2026/04/27 |
| 最終更新日 | 2026/04/27 |



