[PATCH mptcp-next v2 3/5] mptcp: bump setsockopt_seq for subflow-only socket options
Geliang Tang <[email protected]> Sun, 26 Jul 2026 16:43:42 +0800
| Newsgroups | dev.linux.lists.mptcp |
|---|---|
| Message-ID | <7a5c6644d90bab98caebc4b6058eade77b893e4e.1785054808.git.tanggeliang@kylinos.cn> |
From: Geliang Tang <[email protected]> mptcp_setsockopt_sol_socket()'s SO_REUSEPORT/SO_REUSEADDR/SO_BINDTODEVICE /SO_BINDTOIFINDEX case applies the option to the nmpc subflow and copies the result back onto msk, then early-returns without calling sockopt_seq_inc(msk). That leaves msk->setsockopt_seq unchanged, so any subflow created later (e.g. via MP_JOIN) inherits the master socket's seq at creation time, and mptcp_sockopt_sync_locked() sees 'seq matches' and skips sync_socket_options() entirely. As a result, the new subflow's sk_reuse /sk_reuseport/sk_bound_dev_if stay at the listener's default of 0 even though the nmpc subflow (and msk) have the right value. Bump the seq on this path so secondary subflows trigger the sync on join. The actual field propagation lives in sync_socket_options(); this commit only flips the trigger. Signed-off-by: Geliang Tang <[email protected]> --- net/mptcp/sockopt.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c index dc1ef52c2200..37e65923f544 100644 --- a/net/mptcp/sockopt.c +++ b/net/mptcp/sockopt.c @@ -326,6 +326,8 @@ static int mptcp_setsockopt_sol_socket(struct mptcp_sock *msk, int optname, sk->sk_bound_dev_if = ssk->sk_bound_dev_if; else if (optname == SO_BINDTOIFINDEX) sk->sk_bound_dev_if = ssk->sk_bound_dev_if; + + sockopt_seq_inc(msk); } release_sock(sk); return ret; -- 2.53.0