When MPTCP falls back to normal TCP, it needs to reset proto_ops. However, for sockmap and TLS, they have their own custom proto_ops, so simply checking sk->sk_prot is insufficient. For example, an IPv6 request might incorrectly follow the IPv4 code path, leading to kernel panic. Note that Golang has enabled MPTCP by default [1] [1] https://go-review.googlesource.com/c/go/+/607715 Fixes: 8e2b8a9fa512 ("mptcp: don't overwrite sock_ops in mptcp_is_tcpsk()") Signed-off-by: Jiayuan Chen --- net/mptcp/protocol.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c index 0292162a14ee..efcdaeff91f8 100644 --- a/net/mptcp/protocol.c +++ b/net/mptcp/protocol.c @@ -62,10 +62,10 @@ static u64 mptcp_wnd_end(const struct mptcp_sock *msk) static const struct proto_ops *mptcp_fallback_tcp_ops(const struct sock *sk) { #if IS_ENABLED(CONFIG_MPTCP_IPV6) - if (sk->sk_prot == &tcpv6_prot) + if (sk->sk_family == AF_INET6) return &inet6_stream_ops; #endif - WARN_ON_ONCE(sk->sk_prot != &tcp_prot); + WARN_ON(sk->sk_family != AF_INET); return &inet_stream_ops; } -- 2.43.0