From: "Jiayuan Chen" <jiayuan.chen@linux.dev>
To: "Matthieu Baerts" <matttbe@kernel.org>, mptcp@lists.linux.dev
Cc: stable@vger.kernel.org, "Jakub Sitnicki" <jakub@cloudflare.com>,
"John Fastabend" <john.fastabend@gmail.com>,
"Eric Dumazet" <edumazet@google.com>,
"Kuniyuki Iwashima" <kuniyu@google.com>,
"Paolo Abeni" <pabeni@redhat.com>,
"Willem de Bruijn" <willemb@google.com>,
"David S. Miller" <davem@davemloft.net>,
"Jakub Kicinski" <kuba@kernel.org>,
"Simon Horman" <horms@kernel.org>,
"Mat Martineau" <martineau@kernel.org>,
"Geliang Tang" <geliang@kernel.org>,
"Andrii Nakryiko" <andrii@kernel.org>,
"Eduard Zingerman" <eddyz87@gmail.com>,
"Alexei Starovoitov" <ast@kernel.org>,
"Daniel Borkmann" <daniel@iogearbox.net>,
"Martin KaFai Lau" <martin.lau@linux.dev>,
"Song Liu" <song@kernel.org>,
"Yonghong Song" <yonghong.song@linux.dev>,
"KP Singh" <kpsingh@kernel.org>,
"Stanislav Fomichev" <sdf@fomichev.me>,
"Hao Luo" <haoluo@google.com>, "Jiri Olsa" <jolsa@kernel.org>,
"Shuah Khan" <shuah@kernel.org>,
"Florian Westphal" <fw@strlen.de>,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
bpf@vger.kernel.org, linux-kselftest@vger.kernel.org
Subject: Re: [PATCH net v3 1/3] net,mptcp: fix proto fallback detection with BPF sockmap
Date: Thu, 23 Oct 2025 14:38:48 +0000 [thread overview]
Message-ID: <b722c37528e6f94bef828d6ca478a9fa8d33501a@linux.dev> (raw)
In-Reply-To: <cc923a56-cf2d-4c3a-b1bd-90dbc3075ef2@kernel.org>
October 23, 2025 at 22:10, "Matthieu Baerts" <matttbe@kernel.org mailto:matttbe@kernel.org?to=%22Matthieu%20Baerts%22%20%3Cmatttbe%40kernel.org%3E > wrote:
>
> Hi Jiayuan,
>
> On 23/10/2025 14:54, Jiayuan Chen wrote:
>
> >
> > When the server has MPTCP enabled but receives a non-MP-capable request
> > from a client, it calls mptcp_fallback_tcp_ops().
> >
> > Since non-MPTCP connections are allowed to use sockmap, which replaces
> > sk->sk_prot, using sk->sk_prot to determine the IP version in
> > mptcp_fallback_tcp_ops() becomes unreliable. This can lead to assigning
> > incorrect ops to sk->sk_socket->ops.
> >
> > Additionally, when BPF Sockmap modifies the protocol handlers, the
> > original WARN_ON_ONCE(sk->sk_prot != &tcp_prot) check would falsely
> > trigger warnings.
> >
> > Fix this by using the more stable sk_family to distinguish between IPv4
> > and IPv6 connections, ensuring correct fallback protocol operations are
> > selected even when BPF Sockmap has modified the socket protocol handlers.
> >
> > Fixes: 0b4f33def7bb ("mptcp: fix tcp fallback crash")
> > Cc: <stable@vger.kernel.org>
> > Signed-off-by: Jiayuan Chen <jiayuan.chen@linux.dev>
> > Reviewed-by: Jakub Sitnicki <jakub@cloudflare.com>
> > ---
> > net/mptcp/protocol.c | 9 +++++++--
> > 1 file changed, 7 insertions(+), 2 deletions(-)
> >
> > diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> > index 0292162a14ee..2393741bc310 100644
> > --- a/net/mptcp/protocol.c
> > +++ b/net/mptcp/protocol.c
> > @@ -61,11 +61,16 @@ static u64 mptcp_wnd_end(const struct mptcp_sock *msk)
> >
> > static const struct proto_ops *mptcp_fallback_tcp_ops(const struct sock *sk)
> > {
> > + /* When BPF sockmap is used, it may replace sk->sk_prot.
> > + * Using sk_family is a reliable way to determine the IP version.
> > + */
> > + unsigned short family = READ_ONCE(sk->sk_family);
> > +
> > #if IS_ENABLED(CONFIG_MPTCP_IPV6)
> > - if (sk->sk_prot == &tcpv6_prot)
> > + if (family == AF_INET6)
> > return &inet6_stream_ops;
> > #endif
> > - WARN_ON_ONCE(sk->sk_prot != &tcp_prot);
> > + WARN_ON_ONCE(family != AF_INET);
> > return &inet_stream_ops;
> >
> Just to be sure: is there anything in BPF modifying sk->sk_socket->ops?
> Because that's what mptcp_fallback_tcp_ops() will do somehow.
>
> In other words, is it always fine to set inet(6)_stream_ops? (I guess
> yes, but better to be sure while we are looking at that :) )
Hi Matt,
I can confirm that on the BPF side, the only special operations targeting
sockets currently are sockmap/sockhash. Their implementations do not modify
sk->sk_socket->ops. Currently, they only modify sk->prot, because the BPF
side typically operates on 'struct sock' and does not concern itself with
'struct socket'.
Therefore, setting inet(6)_stream_ops is fine.
Thanks,
Jiayuan
> >
> > }
> >
> Cheers,
> Matt
> --
> Sponsored by the NGI0 Core fund.
>
next prev parent reply other threads:[~2025-10-23 14:39 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-23 12:54 [PATCH net v3 0/3] mptcp: Fix conflicts between MPTCP and sockmap Jiayuan Chen
2025-10-23 12:54 ` [PATCH net v3 1/3] net,mptcp: fix proto fallback detection with BPF sockmap Jiayuan Chen
2025-10-23 14:10 ` Matthieu Baerts
2025-10-23 14:38 ` Jiayuan Chen [this message]
2025-10-28 11:30 ` Paolo Abeni
2025-10-28 11:47 ` Paolo Abeni
2025-11-03 12:45 ` Jiayuan Chen
2025-11-03 12:44 ` Jiayuan Chen
2025-10-23 12:54 ` [PATCH net v3 2/3] bpf,sockmap: disallow MPTCP sockets from sockmap Jiayuan Chen
2025-10-28 12:03 ` Paolo Abeni
2025-11-03 12:52 ` Jiayuan Chen
2025-10-23 12:54 ` [PATCH net v3 3/3] selftests/bpf: Add mptcp test with sockmap Jiayuan Chen
2025-10-23 14:10 ` [PATCH net v3 0/3] mptcp: Fix conflicts between MPTCP and sockmap Matthieu Baerts
2025-10-24 4:13 ` Jiayuan Chen
2025-10-28 17:26 ` Matthieu Baerts
2025-11-03 12:34 ` Jiayuan Chen
2025-11-03 15:53 ` Matthieu Baerts
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=b722c37528e6f94bef828d6ca478a9fa8d33501a@linux.dev \
--to=jiayuan.chen@linux.dev \
--cc=andrii@kernel.org \
--cc=ast@kernel.org \
--cc=bpf@vger.kernel.org \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=eddyz87@gmail.com \
--cc=edumazet@google.com \
--cc=fw@strlen.de \
--cc=geliang@kernel.org \
--cc=haoluo@google.com \
--cc=horms@kernel.org \
--cc=jakub@cloudflare.com \
--cc=john.fastabend@gmail.com \
--cc=jolsa@kernel.org \
--cc=kpsingh@kernel.org \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=martin.lau@linux.dev \
--cc=martineau@kernel.org \
--cc=matttbe@kernel.org \
--cc=mptcp@lists.linux.dev \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sdf@fomichev.me \
--cc=shuah@kernel.org \
--cc=song@kernel.org \
--cc=stable@vger.kernel.org \
--cc=willemb@google.com \
--cc=yonghong.song@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.