【活用ガイド】

JVNDB-2026-013399

LinuxのLinux Kernelにおける二重解放に関する脆弱性

概要

Linuxカーネルにおいて、以下の脆弱性が修正されました。net/smc: tee()がspliceパイプバッファを複製するときにsmc_spd_privの二重解放を修正しました。smc_rx_splice()はパイプバッファごとに1つのsmc_spd_privを割り当て、そのポインタをpipe_buffer.privateに格納しています。これらのバッファのpipe_buf_operationsは.get=generic_pipe_buf_getを使用しており、tee(2)がパイプバッファを複製した際にはページ参照カウントのみを増加させました。しかし、smc_spd_privポインタ自体は適切に扱われなかったため、tee()後に元のパイプバッファと複製されたパイプバッファが同じsmc_spd_priv *を共有してしまいます。両方のパイプが後で解放される際、smc_rx_pipe_buf_release()が同じオブジェクトに対して2回呼び出されます。1回目ではkfree(priv)、sock_put(sk)、smc_rx_update_cons()が正常に処理され、2回目ではkfree(priv)、sock_put(sk)、smc_rx_update_cons()が使用後の解放(UAF)を引き起こします。KASANはsmc_rx_pipe_buf_release()内でslab-use-after-freeを報告し、その後解放済みのpriv-smcポインタを参照してNULLポインタデリファレンスとカーネルパニックが発生しました。メモリ安全性の問題だけでなく、SMCスプライスバッファを複製することは意味論的にも問題があります。smc_rx_update_cons()は同じデータに対して2回コンシューマカーソルを進めてしまい、受信ウィンドウの管理が破綻します。smc_spd_privの参照カウントは二重解放を防げますが、カーソルの管理問題は別途対応が必要です。.getコールバックはtee(2)とsplice_pipe_to_pipe()の両方で部分転送に対して呼ばれるため、両者とも現在は-EFAULTを返します。SMCソケットデータを複製する必要があるユーザーは、コピーに基づく読み取りパスを使用する必要があります。
CVSS による深刻度 (CVSS とは?)

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


Linux
  • Linux Kernel 4.18.1 以上 5.10.253 未満
  • Linux Kernel 5.11 以上 5.15.203 未満
  • Linux Kernel 5.16 以上 6.1.168 未満
  • Linux Kernel 6.13 以上 6.18.21 未満
  • Linux Kernel 6.19 以上 6.19.11 未満
  • Linux Kernel 6.2 以上 6.6.131 未満
  • Linux Kernel 6.7 以上 6.12.80 未満
  • Linux Kernel 4.18
  • Linux Kernel 7.0

想定される影響

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

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

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

  1. 二重解放(CWE-415) [NVD評価]
共通脆弱性識別子(CVE)  CVEとは?

  1. CVE-2026-31507
参考情報

  1. National Vulnerability Database (NVD) : CVE-2026-31507
  2. 関連文書 : net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/ae5575e660410c8d2c5d38fb28a0f37aea945676)
  3. 関連文書 : net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/3cc76380fea749280c026f410af56a28aaac388a)
  4. 関連文書 : net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/7e8916f46c2f48607f907fd401590093753a6bc5)
  5. 関連文書 : net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/54c87a730157868543ebdfa0ecb21b4590ed23a5)
  6. 関連文書 : net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/7bcb974c771c863e8588cea0012ac204443a7126)
  7. 関連文書 : net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/24dd586bb4cbba1889a50abe74143817a095c1c9)
  8. 関連文書 : net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/81acbd345d405994875d419d43b319fee0b9ad62)
  9. 関連文書 : net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer - kernel/git/stable/linux.git - Linux kernel stable tree (https://git.kernel.org/stable/c/98ba5cb274768146e25ffbfde47753652c1c20d3)
更新履歴

  • [2026年04月30日]
      掲載