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ソケットデータを複製する必要があるユーザーは、コピーに基づく読み取りパスを使用する必要があります。
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-415) [NVD評価]
CVE-2026-31507
National Vulnerability Database (NVD) : CVE-2026-31507 関連文書 : 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) 関連文書 : 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) 関連文書 : 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) 関連文書 : 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) 関連文書 : 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) 関連文書 : 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) 関連文書 : 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) 関連文書 : 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日] 掲載