【活用ガイド】

JVNDB-2026-023150

LinuxのLinux Kernelにおける不特定の脆弱性

概要

Linuxカーネルにおいて、以下の脆弱性が修正されました:RDMA/rxeにおける、MRのページサイズがPAGE_SIZEと異なる場合のiovaからvaへの変換の修正です。現状の実装では、システムのPAGE_SIZEと異なるページサイズを持つメモリ領域(MR)の取り扱いが誤っています。根本的な問題は、rxe_set_page()がmr->page_sizeのステップで呼び出される一方で、page_listは個々のstruct pageポインタを格納し、それぞれがPAGE_SIZE分のメモリを表していることにあります。ib_sg_to_page()は、i >= 1の場合に以下のいずれかを保証しています。a) SG[i-1].dma_endとSG[i].dma_addrが連続している、b) SG[i-1].dma_endとSG[i].dma_addrがmr->page_sizeでアライメントされている、ということです。これにより、次のようなケースで誤ったiovaからvaへの変換が発生します。1) page_size < PAGE_SIZEの場合(例:MRのページサイズが4Kで、システムのPAGE_SIZEが64Kの場合) ibmr->iova = 0x181800 sg[0]: dma_addr=0x181800, len=0x800 sg[1]: dma_addr=0x173000, len=0x1000 iovaアクセス = 0x181800 + 0x810 = 0x182010 期待されるVAは0x173010(2番目のSG、オフセット0x10)ですが、修正前は以下のようになっていました。 - index = (0x182010 >> 12) - (0x181800 >> 12) = 1 - page_offset = 0x182010 & 0xFFF = 0x10 - xarray[1] はシステムページベース0x170000を格納 - 結果のVAは0x170000 + 0x10 = 0x170010となり、誤りです。2) page_size > PAGE_SIZEの場合(例:MRのページサイズが64Kで、システムのPAGE_SIZEが4Kの場合) ibmr->iova = 0x18f800 sg[0]: dma_addr=0x18f800, len=0x800 sg[1]: dma_addr=0x170000, len=0x1000 iovaアクセス = 0x18f800 + 0x810 = 0x190010 期待されるVAは0x170010(2番目のSG、オフセット0x10)ですが、修正前は以下のようになっていました。 - index = (0x190010 >> 16) - (0x18f800 >> 16) = 1 - page_offset = 0x190010 & 0xFFFF = 0x10 - xarray[1] はdma_addr 0x170000のシステムページを格納 - 結果のVAは0x170000のシステムページ + 0x10 = 0x170010となり、これも誤りです。この欠陥に関連して、Yi Zhang氏が数年前にカーネルパニックを報告しています[1]。解決策としては、1. 全てのMRページインデックスが連続しているため、連続インデックスアクセスのためにxarrayを事前割り当て済みのrxe_mr_page配列に置き換えること、2. 各rxe_mr_pageがstruct page*とシステムページ内のオフセットの両方を保持すること、3. MRのpage_sizeとPAGE_SIZEが異なる場合の処理として、 - page_size > PAGE_SIZEの場合はMRページを複数のシステムページに分割し、 - page_size <= PAGE_SIZEの場合はシステムページ内のオフセットを保存すること、4. 境界チェックと互換性検証を追加すること、です。これにより、MRページサイズとシステムのPAGE_SIZEの関係にかかわらず、正確なiovaからvaへの変換が保証され、配列ベースの順次アクセスによる性能向上も実現されます。4Kおよび64K PAGE_SIZEのホスト上でのテストは以下の通りです。- rdma-core/pytestsでの実行: $ ./build/bin/run_tests.py --dev eth0_rxe- - blktest: $ TIMEOUT=30 QUICK_RUN=1 USE_RXE=1 NVMET_TRTYPES=rdma ./check nvme srp rnbd[1] https://lore.kernel.org/all/CAHj4cs9XRqE25jyVw9rj9YugffLn5+f=1znaBEnu1usLOciD+g@mail.gmail.com/T/
CVSS による深刻度 (CVSS とは?)

CVSS v3 による深刻度
基本値: 9.8 (緊急) [その他]
  • 攻撃元区分: ネットワーク
  • 攻撃条件の複雑さ: 低
  • 攻撃に必要な特権レベル: 不要
  • 利用者の関与: 不要
  • 影響の想定範囲: 変更なし
  • 機密性への影響(C): 高
  • 完全性への影響(I): 高
  • 可用性への影響(A): 高
影響を受けるシステム


Linux
  • Linux Kernel 6.19 以上 6.19.4 未満
  • Linux Kernel 6.2.3 以上 6.18.14 未満

想定される影響

・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。
・当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。
・当該ソフトウェアが完全に停止する可能性があります。
対策

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

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

  1. 情報不足(CWE-noinfo) [NVD評価]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-46325
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-46325
  2. 関連文書 : RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/409c2c5508f3d30627bea576f8676de523cb906e)
  3. 関連文書 : RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/836f6c13c9674027793f720be3f15ecd2b90b6ca)
  4. 関連文書 : RDMA/rxe: Fix iova-to-va conversion for MR page sizes != PAGE_SIZE - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/12985e5915a0b8354796efadaaeb201eed115377)
更新履歴

  • [2026年07月10日]
      掲載