【活用ガイド】

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値]
  • 攻撃元区分: ローカル
  • 攻撃条件の複雑さ: 高
  • 攻撃に必要な特権レベル: 低
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更なし
  • 機密性への影響(C): なし
  • 完全性への影響(I): なし
  • 可用性への影響(A): 高
影響を受けるシステム


Linux
  • Linux Kernel 6.18.1 以上 6.18.17 未満
  • Linux Kernel 6.19 以上 6.19.7 未満
  • Linux Kernel 6.18
  • Linux Kernel 7.0

想定される影響

当該ソフトウェアが扱う情報について、外部への漏えいは発生しません。
また、当該ソフトウェアが扱う情報について、書き換えは発生しません。
さらに、当該ソフトウェアが完全に停止する可能性があります。
そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。
対策

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。
ベンダ情報

CWEによる脆弱性タイプ一覧  CWEとは?

  1. 競合状態(CWE-362) [NVD評価]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-23342
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-23342
  2. 関連文書 : bpf: Fix race in cpumap on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/869c63d5975d55e97f6b168e885452b3da20ea47)
  3. 関連文書 : bpf: Fix race in cpumap on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/e67299e1044349ad0088d52c6bc5764cc1816c06)
  4. 関連文書 : bpf: Fix race in cpumap on PREEMPT_RT - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/7466ae2aeed483de80c5d8dea0913cf74038b652)
更新履歴

  • [2026年04月27日]
      掲載