mptcp: sync the msk->sndbuf at accept() time
Subsystems (2)
Matthieu Baerts (NGI0)
maintainerPATCH 1/1 mptcp: sync the msk->sndbuf at accept() time
From: Gang Yan <[email protected]>
commit fcf04b14334641f4b0b8647824480935e9416d52 upstream.
On passive MPTCP connections, the msk sndbuf is not updated correctly.
The root cause is an order issue in the accept path:
- tcp_check_req() -> subflow_syn_recv_sock() -> mptcp_sk_clone_init() calls __mptcp_propagate_sndbuf() to copy the ssk sndbuf into msk
- Later, tcp_child_process() -> tcp_init_transfer() -> tcp_sndbuf_expand() grows the ssk sndbuf.
So __mptcp_propagate_sndbuf() runs before the ssk sndbuf has been expanded and the msk ends up with a much smaller sndbuf than the subflow:
MPTCP: msk->sndbuf:20480, msk->first->sndbuf:2626560
Fix this by moving the __mptcp_propagate_sndbuf() call from mptcp_sk_clone_init() -- the ssk sndbuf is not yet finalized there -- to __mptcp_propagate_sndbuf() at accept() time, when the ssk sndbuf has been fully expanded by tcp_sndbuf_expand().
[ No conflicts, but move __mptcp_propagate_sndbuf() above the for-loop
(mptcp_for_each_subflow()) present in this version, which will modify 'subflow' used by __mptcp_propagate_sndbuf() in this new patch. ]
--- net/mptcp/protocol.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)
net/mptcp/protocol.c +2 -1
@@ -3428,7 +3428,6 @@ struct sock *mptcp_sk_clone_init(const struct sock *sk,* uses the correct data */ mptcp_copy_inaddrs (nsk, ssk); -__mptcp_propagate_sndbuf (nsk, ssk);mptcp_rcv_space_init (msk, ssk); msk->rcvq_space.time =mptcp_stamp ();
@@ -4027,6 +4026,8 @@ static int mptcp_stream_accept(struct socket *sock, struct socket *newsock, msk =mptcp_sk (newsk); msk->in_accept_queue =0 ; +__mptcp_propagate_sndbuf (newsk,mptcp_subflow_tcp_sock (subflow)); +/* set ssk->sk_socket of accept()ed flows to mptcp socket. * This is needed so NOSPACE flag can be set from tcp stack. */
Signature · 1 line
2.53.0
Re: [PATCH 6.18.y] mptcp: sync the msk->sndbuf at accept time
Quoted 1 line
[PATCH 6.18.y] mptcp: sync the
msk->sndbufat accept time
Queued for 6.18.y, thanks.
--
Sasha