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: 8+ 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-11 19:05 ` Ryder Grass
2026-08-06 12:31 ` [PATCH net v3 0/2] mptcp: fix request migration ownership MPTCP CI
2026-08-06 12:43 ` Matthieu Baerts [this message]
2026-08-07 8:05 ` 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 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.