mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-09-18 23:19:34 +02:00
mptcp: prevent race between disconnect() and rtx
Sashiko noted that the two event can race, leading to inconsistent
status. Prevent the race using the synchronous timer stop operation.
Cc: stable@vger.kernel.org
Fixes: b29fcfb54c ("mptcp: full disconnect implementation")
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20260908-net-mptcp-misc-fixes-7-3-rc1-v2-6-df1de70348b6@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
ab36b1a809
commit
85c580b0d8
@@ -3588,6 +3588,7 @@ static void mptcp_destroy_common(struct mptcp_sock *msk)
|
||||
|
||||
static int mptcp_disconnect(struct sock *sk, int flags)
|
||||
{
|
||||
struct inet_connection_sock *icsk = inet_csk(sk);
|
||||
struct mptcp_sock *msk = mptcp_sk(sk);
|
||||
|
||||
/* We are on the fastopen error path. We can't call straight into the
|
||||
@@ -3600,8 +3601,13 @@ static int mptcp_disconnect(struct sock *sk, int flags)
|
||||
mptcp_check_listen_stop(sk);
|
||||
mptcp_set_state(sk, TCP_CLOSE);
|
||||
|
||||
mptcp_stop_rtx_timer(sk);
|
||||
mptcp_stop_tout_timer(sk);
|
||||
/* The later subflow close can not kick again the tout timer,
|
||||
* as the msk is already in closed status.
|
||||
*/
|
||||
msk->timer_ival = icsk->icsk_rto_min;
|
||||
sk_stop_timer_sync(sk, &sk->mptcp_retransmit_timer);
|
||||
icsk->icsk_mtup.probe_timestamp = 0;
|
||||
sk_stop_timer_sync(sk, &icsk->mptcp_tout_timer);
|
||||
|
||||
mptcp_pm_connection_closed(msk);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user