From: Matthieu Baerts <matttbe@kernel.org>
To: Ren Wei <weir@nebusec.ai>, netdev@vger.kernel.org, mptcp@lists.linux.dev
Cc: martineau@kernel.org, geliang@kernel.org, davem@davemloft.net,
edumazet@google.com, kuba@kernel.org, pabeni@redhat.com,
horms@kernel.org, ncardwell@google.com, kuniyu@google.com,
daniel@iogearbox.net, kafai@fb.com, kylebot@openai.com,
david.lee@trailofbits.com, vega@nebusec.ai,
caoruide123@gmail.com, sashiko-bot@kernel.org
Subject: Re: [PATCH net v3 0/2] mptcp: fix request migration ownership
Date: Thu, 6 Aug 2026 14:43:21 +0200 [thread overview]
Message-ID: <202a6f62-6ffb-4f18-9168-66621b2963f3@kernel.org> (raw)
In-Reply-To: <cover.1785995291.git.caoruide123@gmail.com>
Hi Ren, Ruide,
Thank you for the v3! Here is a quick reaction, only about the
reproducers, not about the kernel code:
On 06/08/2026 13:14, Ren Wei wrote:
(...)
> Changes in v3:
(...)
> - Added a packetdrill MP_CAPABLE reproducer and decoded warning.
Nice, very appreciated, thank you!
I confirm they work well!
> // poc for MP_JOIN:
>
> // Minimal reproducer for a stale subflow_req->msk after reqsk migration.
> --tolerance_usecs=200000
> --non_fatal=packet
>
> `sysctl -q net.mptcp.enabled=1
Small details to help you next time to look at packetdrill reproducers
for MPTCP:
- You can add new tests in gtests/net/mptcp/<dir>/<file>.pkt from the
MPTCP packetdrill repository.
- Then here above, you can add: `../common/defaults.sh`.
- And execute your tests with run_all.py from the gtests/net dir, e.g.:
./packetdrill/run_all.py -lv4 mptcp/<dir>/<file>.pkt
These tests will then be executed from a dedicated netns, using many
sysctl settings: this helps to reproduce issues in a more controlled
environment.
> sysctl -q net.ipv4.tcp_migrate_req=1
> sysctl -q net.ipv4.tcp_synack_retries=1`
(detail) Here, tcp_synack_retries can be set to 0, then the sleep at the
end can be reduced.
> // Listener A and the owning MPTCP connection.
> +0 socket(..., SOCK_STREAM, IPPROTO_MPTCP) = 3
> +0 setsockopt(3, SOL_SOCKET, SO_REUSEADDR, [1], 4) = 0
> +0 setsockopt(3, SOL_SOCKET, SO_REUSEPORT, [1], 4) = 0
> +0 bind(3, ..., ...) = 0
> +0 listen(3, 8) = 0
>
> +0.0 < addr[caddr0] > addr[saddr0] S 0:0(0) win 65535 <mss 1460, sackOK, TS val 1000 ecr 0, nop, wscale 8, mpcapable v1 flags[flag_h] nokey>
Also for next time, when validating the listener side, feel free to drop
the TCP Timestamps option if it is not required (like what you did with
the other test): that makes the .pkt file more readable.
(...)
> MP_CAPABLE packetdrill reproducer:
>
> // Reproducer for MP_CAPABLE request token ownership during TCP req migration.
> //
> // The first listener owns the request created by the MP_CAPABLE SYN. A second
> // SO_REUSEPORT listener is added only after that SYN, then the first listener is
> // closed. The SYN+ACK retransmission timer migrates the request to the second
> // listener, and a later request timer destroys the migrated request.
> //
> // On a vulnerable kernel, inet_reqsk_clone() raw-copies token_node. The clone
> // is not the token table owner, so destroying the migrated request triggers the
> // MPTCP token ownership bug.
> --tolerance_usecs=250000
>
> +0 `sysctl -q net.mptcp.enabled=1`
> +0 `sysctl -q net.ipv4.tcp_migrate_req=1`
> +0 `sysctl -q net.ipv4.tcp_synack_retries=2`
> +0 `sysctl -q net.ipv4.tcp_timestamps=1`
> +0 `sysctl -q kernel.panic_on_warn=0`
> +0 `sysctl -q kernel.panic_on_oops=0`
> +0 `ip tcp_metrics flush all >/dev/null 2>&1 || true`
> +0 `tc qdisc replace dev tun0 root pfifo >/dev/null 2>&1 || true`
Same here for `../common/defaults.sh`. Then I guess you only need
tcp_migrate_req=1 and tcp_synack_retries=2 (set to 0 to reduce the last
wait), and "wscale" will always be 8 in the S(.) instead of depending on
the environment.
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
next prev parent reply other threads:[~2026-08-06 12:43 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-08-06 11:14 [PATCH net v3 0/2] mptcp: fix request migration ownership Ren Wei
2026-08-06 11:14 ` [PATCH net v3 1/2] mptcp: hold MP_JOIN msk ref when cloning reqsk Ren Wei
2026-08-06 11:14 ` [PATCH net v3 2/2] mptcp: fix MP_CAPABLE token migration " Ren Wei
2026-08-09 18:03 ` Matthieu Baerts
2026-08-06 12:43 ` Matthieu Baerts [this message]
2026-08-07 8:05 ` [PATCH net v3 0/2] mptcp: fix request migration ownership Nebula Security
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=202a6f62-6ffb-4f18-9168-66621b2963f3@kernel.org \
--to=matttbe@kernel.org \
--cc=caoruide123@gmail.com \
--cc=daniel@iogearbox.net \
--cc=davem@davemloft.net \
--cc=david.lee@trailofbits.com \
--cc=edumazet@google.com \
--cc=geliang@kernel.org \
--cc=horms@kernel.org \
--cc=kafai@fb.com \
--cc=kuba@kernel.org \
--cc=kuniyu@google.com \
--cc=kylebot@openai.com \
--cc=martineau@kernel.org \
--cc=mptcp@lists.linux.dev \
--cc=ncardwell@google.com \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=sashiko-bot@kernel.org \
--cc=vega@nebusec.ai \
--cc=weir@nebusec.ai \
/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