[PATCH mptcp-next v4 02/10] mptcp: inherit sk_reuse/sk_reuseport on subflow creation

Geliang Tang <[email protected]> Thu, 30 Jul 2026 10:53:55 +0800
Newsgroups dev.linux.lists.mptcp
Message-ID <7e0df1d3036d4eed4667c3997d04bf482b792e0d.1785378180.git.tanggeliang@kylinos.cn>
From: Geliang Tang <[email protected]>

Propagate sk_reuse and sk_reuseport from the master socket to newly-created
subflows. Without this, subflows created after the master toggles
SO_REUSEADDR/SO_REUSEPORT would not inherit the setting.

Also bump setsockopt_seq in the SO_REUSEPORT/SO_REUSEADDR path so that
subflows created later (e.g. via MP_JOIN) trigger sync_socket_options()
instead of skipping it.

Signed-off-by: Geliang Tang <[email protected]>
---
 net/mptcp/sockopt.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/net/mptcp/sockopt.c b/net/mptcp/sockopt.c
index fcf6feb2a9eb..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;
@@ -1601,6 +1603,9 @@ static void sync_socket_options(struct mptcp_sock *msk, struct sock *ssk)
 	inet_assign_bit(FREEBIND, ssk, inet_test_bit(FREEBIND, sk));
 	inet_assign_bit(BIND_ADDRESS_NO_PORT, ssk, inet_test_bit(BIND_ADDRESS_NO_PORT, sk));
 	WRITE_ONCE(inet_sk(ssk)->local_port_range, READ_ONCE(inet_sk(sk)->local_port_range));
+
+	ssk->sk_reuse = sk->sk_reuse;
+	ssk->sk_reuseport = sk->sk_reuseport;
 }
 
 void mptcp_sockopt_sync_locked(struct mptcp_sock *msk, struct sock *ssk)
-- 
2.53.0