[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