]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
bpf: tcp: Fix type confusion in bpf_skc_to_tcp6_sock().
authorKuniyuki Iwashima <kuniyu@google.com>
Mon, 4 May 2026 21:04:52 +0000 (21:04 +0000)
committerMartin KaFai Lau <martin.lau@kernel.org>
Fri, 8 May 2026 18:38:10 +0000 (11:38 -0700)
bpf_skc_to_tcp6_sock() only checks if sk->sk_protocol is IPPROTO_TCP
and sk->sk_family is AF_INET6, but RAW socket can bypass it:

  socket(AF_INET6, SOCK_RAW, IPPROTO_TCP)

Let's check sk->sk_type too.

Fixes: af7ec1383361 ("bpf: Add bpf_skc_to_tcp6_sock() helper")
Signed-off-by: Kuniyuki Iwashima <kuniyu@google.com>
Signed-off-by: Martin KaFai Lau <martin.lau@kernel.org>
Link: https://patch.msgid.link/20260504210610.180150-6-kuniyu@google.com
net/core/filter.c

index 7d945dc2cb92d168b9972c7fa50db65f17b7491c..684922efd48106fbba681093a31b50422b506fed 100644 (file)
@@ -11947,7 +11947,7 @@ BPF_CALL_1(bpf_skc_to_tcp6_sock, struct sock *, sk)
         */
        BTF_TYPE_EMIT(struct tcp6_sock);
        if (sk && sk_fullsock(sk) && sk->sk_protocol == IPPROTO_TCP &&
-           sk->sk_family == AF_INET6)
+           sk->sk_type == SOCK_STREAM && sk->sk_family == AF_INET6)
                return (unsigned long)sk;
 
        return (unsigned long)NULL;