JVNDB-2026-031749 | |
LinuxのLinux KernelにおけるNULL ポインタデリファレンスに関する脆弱性 | |
| 概要 | |
Linuxカーネルにおいて、以下の脆弱性が修正されました。ovpn: tcp - ovpn_tcp_close()内でキャッシュされたpeerポインターを使用します。ovpn_tcp_close()はrcu_read_lock()の下でrcu_dereference_sk_user_data()を使いovpn_socketを読み込み、sock->peerの参照を取得し、peerポインターをローカル変数にキャッシュした後、読み取りロックを解除します。その後、キャッシュされたローカル変数ではなくsock->peerをovpn_peer_del()に渡し、RCU読み取りセクション終了後にovpn_socketを再参照しています。同じ「RCU下で読み込み、ロック解除後に使用する」というパターンを用いていますが、ovpn_tcp_sendmsg()は関数全体でlock_sock()による保護がある一方、ovpn_tcp_close()はソケットロックなしで動作します。inet_release()はlock_sockを取得せずにsk_prot->close()を呼び出します。したがって、ovpn_socket_release()はovpn_tcp_close()がrcu_read_lock()を解除した後、sock->peerを再参照する前にkref_put -> detach -> synchronize_rcu -> kfree(sock)のシーケンスを並行して完了させることが可能です。ovpn_socket_release()内のsynchronize_rcu()はRCU読み取りセクション内でポインターを使用するリーダーを保護しますが、そのポインターをローカル変数に逃して後で使用する場合には保護しません。再現手順はコミット94560267d6c4("ovpn: tcp - tcp_close()後にNULLのsk_socketメンバーをデリファレンスしない")のパターンに従います。ユーザースペースがTCPファイルディスクリプタを閉じる瞬間にピア削除(キープアライブ期限切れやnetlinkのOVPN_CMD_DEL_PEER)をトリガーします。このコミットでは同じレースウィンドウのdetach側が修正されており、今回の修正は異なる対象であるclose側を修正します。エントリーブロックを厳密にし、sock->peerを1回だけキャッシュされたpeerローカル変数に読み込んで、その後のすべての使用(ホールドチェック、ovpn_peer_del()呼び出し、prot->close()呼び出し)をそのローカル変数を経由して行うようにします。sock->peerはovpn_socket_new()内でlock_sock()中に一度だけ書き込まれ、rcu_assign_sk_user_data()でovpn_socketが公開された後は再代入されませんが、以前の複数回読込のパターンではこの不変条件が暗黙的でした。同じ複数回読込パターンはovpn_tcp_recvmsg()、ovpn_tcp_sendmsg()、ovpn_tcp_data_ready()、ovpn_tcp_write_space()にも存在します。これらは後続のnet-nextシリーズの専用ヘルパーによってクリーンアップされます。 | |
| CVSS による深刻度 (CVSS とは?) | |
|
CVSS v3 による深刻度
基本値: 8.4 (重要) [その他]
| |
| 影響を受けるシステム | |
|
| |
Linux | |
|
| |
| 想定される影響 | |
・当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 | |
| 対策 | |
リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 | |
| ベンダ情報 | |
|
| |
| CWEによる脆弱性タイプ一覧 CWEとは? | |
| |
| 共通脆弱性識別子(CVE) CVEとは? | |
|
| |
| 参考情報 | |
| |
| 更新履歴 | |
|
| 公表日 | 2026/07/19 |
| 登録日 | 2026/09/03 |
| 最終更新日 | 2026/09/03 |



