From: "Jiayuan Chen" <jiayuan.chen@linux.dev>
To: "Matthieu Baerts" <matttbe@kernel.org>,
stable@vger.kernel.org, mptcp@lists.linux.dev, sashal@kernel.org,
gregkh@linuxfoundation.org
Cc: "Jakub Sitnicki" <jakub@cloudflare.com>
Subject: Re: [PATCH 6.1.y v1 2/2] net,mptcp: fix proto fallback detection with BPF
Date: Mon, 01 Dec 2025 01:43:43 +0000 [thread overview]
Message-ID: <044675704c377d9100c60e2ee30cb66790c0916f@linux.dev> (raw)
In-Reply-To: <f24fccc6-9491-474f-a907-0ea53fbdc5ec@kernel.org>
2025/12/1 24:21, "Matthieu Baerts" <matttbe@kernel.org mailto:matttbe@kernel.org?to=%22Matthieu%20Baerts%22%20%3Cmatttbe%40kernel.org%3E > wrote:
>
> Hi Jiayuan,
>
> On 30/11/2025 04:23, Jiayuan Chen wrote:
>
> >
> > The sockmap feature allows bpf syscall from userspace, or based
> > on bpf sockops, replacing the sk_prot of sockets during protocol stack
> > processing with sockmap's custom read/write interfaces.
> >
> (...)
>
> >
> > diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
> > index 1dbc62537259..13e3510e6c8f 100644
> > --- a/net/mptcp/protocol.c
> > +++ b/net/mptcp/protocol.c
> > @@ -79,8 +79,9 @@ static u64 mptcp_wnd_end(const struct mptcp_sock *msk)
> > static bool mptcp_is_tcpsk(struct sock *sk)
> > {
> > struct socket *sock = sk->sk_socket;
> > + unsigned short family = READ_ONCE(sk->sk_family);
> >
> > - if (unlikely(sk->sk_prot == &tcp_prot)) {
> > + if (unlikely(family == AF_INET)) {
> > /* we are being invoked after mptcp_accept() has
> > * accepted a non-mp-capable flow: sk is a tcp_sk,
> > * not an mptcp one.
> > @@ -91,7 +92,7 @@ static bool mptcp_is_tcpsk(struct sock *sk)
> > sock->ops = &inet_stream_ops;
> > return true;
> > #if IS_ENABLED(CONFIG_MPTCP_IPV6)
> > - } else if (unlikely(sk->sk_prot == &tcpv6_prot)) {
> > + } else if (unlikely(family == AF_INET6)) {
> >
> These modifications here break MPTCP: this function (mptcp_is_tcpsk) is
> there to check if the socket is a "plain" TCP one (return "true") or an
> MPTCP one (return "false"). If it is not an MPTCP one, the sock ops is
> modified.
>
> Here, you are saying: any IPv4 or IPv6 socket is a "plain" TCP one,
> never an MPTCP socket then.
>
> I suggest adding ...
>
> if (sk->sk_protocol == IPPROTO_MPTCP)
> return false;
>
> ... at the beginning of this function. I'm planning to send a patch
> later on including this check. Once it is sent, do you mind checking it
> with sockmap if you have the setup available, please?
Yes, of course. I can test it once I receive the patch.
> Cheers,
> Matt
> --
> Sponsored by the NGI0 Core fund.
>
next prev parent reply other threads:[~2025-12-01 1:44 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-30 3:23 [PATCH 6.1.y v1 0/2] mptcp: Fix conflicts between MPTCP and sockmap Jiayuan Chen
2025-11-30 3:23 ` [PATCH 6.1.y v1 1/2] mptcp: disallow MPTCP subflows from sockmap Jiayuan Chen
2025-11-30 3:23 ` [PATCH 6.1.y v1 2/2] net,mptcp: fix proto fallback detection with BPF Jiayuan Chen
2025-11-30 16:21 ` Matthieu Baerts
2025-12-01 1:43 ` Jiayuan Chen [this message]
2025-11-30 16:21 ` [PATCH 6.1.y v1 0/2] mptcp: Fix conflicts between MPTCP and sockmap 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=044675704c377d9100c60e2ee30cb66790c0916f@linux.dev \
--to=jiayuan.chen@linux.dev \
--cc=gregkh@linuxfoundation.org \
--cc=jakub@cloudflare.com \
--cc=matttbe@kernel.org \
--cc=mptcp@lists.linux.dev \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox