| タイトル | 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ソケットデータを複製する必要があるユーザーは、コピーに基づく読み取りパスを使用する必要があります。 |
| 想定される影響 | 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う全ての情報が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| 対策 | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| 公表日 | 2026年4月22日0:00 |
| 登録日 | 2026年4月30日12:14 |
| 最終更新日 | 2026年4月30日12:14 |
| CVSS3.0 : 重要 | |
| スコア | 7.8 |
|---|---|
| ベクター | CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H |
| Linux |
| Linux Kernel 4.18 |
| 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 7.0 |
| No | 変更内容 | 変更日 |
|---|---|---|
| 1 | [2026年04月30日] 掲載 |
2026年4月30日12:14 |
| 概要 | In the Linux kernel, the following vulnerability has been resolved: net/smc: fix double-free of smc_spd_priv when tee() duplicates splice pipe buffer smc_rx_splice() allocates one smc_spd_priv per pipe_buffer and stores When both pipes are subsequently released, smc_rx_pipe_buf_release() is 1st call: kfree(priv) sock_put(sk) smc_rx_update_cons() [correct] KASAN reports a slab-use-after-free in smc_rx_pipe_buf_release(), which BUG: KASAN: slab-use-after-free in smc_rx_pipe_buf_release+0x78/0x2a0 BUG: kernel NULL pointer dereference, address: 0000000000000020 Beyond the memory-safety problem, duplicating an SMC splice buffer is The .get callback is invoked by both tee(2) and splice_pipe_to_pipe() |
|---|---|
| 公表日 | 2026年4月22日23:16 |
| 登録日 | 2026年4月25日4:05 |
| 最終更新日 | 2026年4月29日0:05 |
| 構成1 | 以上 | 以下 | より上 | 未満 | |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.18.1 | 5.10.253 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 | 5.15.203 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 | 6.1.168 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.2 | 6.6.131 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.7 | 6.12.80 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 | 6.18.21 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.19 | 6.19.11 | |||
| cpe:2.3:o:linux:linux_kernel:4.18:-:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc1:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc2:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc3:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc4:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc5:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc6:*:*:*:*:*:* | |||||
| cpe:2.3:o:linux:linux_kernel:7.0:rc7:*:*:*:*:*:* | |||||