[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