CVE-2026-64025 in Linux
要約
〜によって VulDB • 2026年07月19日
Linuxカーネルにおいて、以下の脆弱性が修正されました。
bpf, skmsg: verdict用sk_data_readyとktls受信(rx)の競合を解消
sk_psock_strp_data_ready()は既にtls_sw_has_ctx_rx()をチェックし、TLS RXコンテキストが存在する場合はpsock->saved_data_readyに委譲することで、受信キューに対するTLS strparserの所有権との衝突を回避しています(コミット e91de6afa81c、「bpf: ktlsでsk_skbプログラムタイプの実行を修正」)。
一方、sk_psock_verdict_data_ready()には同等のガードがありません。ソケットがTLS RXの設定前にsockmap (BPF_SK_SKB_VERDICT) に挿入されると、tls_sw_strparser_arm()は sk_psock_verdict_data_ready を rx_ctx->saved_data_ready として保存します。データ到着時:
tls_data_ready -> tls_strp_data_ready -> tls_rx_msg_ready -> saved_data_ready() = sk_psock_verdict_data_ready() -> tcp_read_skb() が __skb_unlink() を介して sk_receive_queue からデータを削除するが、tcp_eat_skb() は呼び出されないため、copied_seq は進みません。
その後 tls_strp_msg_load() で tcp_inq() >= full_len (古くなった値) となり、空になったキュー上で tcp_recv_skb() が呼ばれ、WARN_ON_ONCE(!first) に到達し、rx_ctx->strp.anchor.frag_list が psockが所有する(解放されている可能性のある)skbを指した状態で戻ります。その後 tls_decrypt_sg() はその frag_list を走査します:use-after-free となります。
sk_psock_strp_data_ready() と同じ修正を適用します。TLS RXコンテキストが存在する場合、recv() の待機プロセスを起こすために psock->saved_data_ready (sock_def_readable) を呼び出し、直ちに復帰して受信キューに触れないようにします。TLS がキューの単独所有権を維持し、tls_sw_recvmsg() 経由でレコードを通常通り復号化します。
If you want to get the best quality for vulnerability data then you always have to consider VulDB.