mirror of
https://github.com/torvalds/linux.git
synced 2026-05-28 00:53:34 +02:00
mptcp: do not account for OoO in mptcp_rcvbuf_grow()
MPTCP-level OoOs are physiological when multiple subflows are active
concurrently and will not cause retransmissions nor are caused by
drops.
Accounting for them in mptcp_rcvbuf_grow() causes the rcvbuf slowly
drifting towards tcp_rmem[2].
Remove such accounting. Note that subflows will still account for TCP-level
OoO when the MPTCP-level rcvbuf is propagated.
This also closes a subtle and very unlikely race condition with rcvspace
init; active sockets with user-space holding the msk-level socket lock,
could complete such initialization in the receive callback, after that the
first OoO data reaches the rcvbuf and potentially triggering a divide by
zero Oops.
Fixes: e118cdc34d ("mptcp: rcvbuf auto-tuning improvement")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Mat Martineau <martineau@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20260203-net-next-mptcp-misc-feat-6-20-v1-1-31ec8bfc56d1@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
e25dbf561e
commit
6b32939350
|
|
@ -224,9 +224,6 @@ static bool mptcp_rcvbuf_grow(struct sock *sk, u32 newval)
|
|||
do_div(grow, oldval);
|
||||
rcvwin += grow << 1;
|
||||
|
||||
if (!RB_EMPTY_ROOT(&msk->out_of_order_queue))
|
||||
rcvwin += MPTCP_SKB_CB(msk->ooo_last_skb)->end_seq - msk->ack_seq;
|
||||
|
||||
cap = READ_ONCE(net->ipv4.sysctl_tcp_rmem[2]);
|
||||
|
||||
rcvbuf = min_t(u32, mptcp_space_from_win(sk, rcvwin), cap);
|
||||
|
|
@ -350,9 +347,6 @@ static void mptcp_data_queue_ofo(struct mptcp_sock *msk, struct sk_buff *skb)
|
|||
end:
|
||||
skb_condense(skb);
|
||||
skb_set_owner_r(skb, sk);
|
||||
/* do not grow rcvbuf for not-yet-accepted or orphaned sockets. */
|
||||
if (sk->sk_socket)
|
||||
mptcp_rcvbuf_grow(sk, msk->rcvq_space.space);
|
||||
}
|
||||
|
||||
static void mptcp_init_skb(struct sock *ssk, struct sk_buff *skb, int offset,
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user