mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
mptcp: disable add_addr retransmission when timeout is 0
[ Upstream commit f5ce0714623cffd00bf2a83e890d09c609b7f50a ]
When add_addr_timeout was set to 0, this caused the ADD_ADDR to be
retransmitted immediately, which looks like a buggy behaviour. Instead,
interpret 0 as "no retransmissions needed".
The documentation is updated to explicitly state that setting the timeout
to 0 disables retransmission.
Fixes: 93f323b9cc
("mptcp: add a new sysctl add_addr_timeout")
Cc: stable@vger.kernel.org
Suggested-by: Matthieu Baerts <matttbe@kernel.org>
Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn>
Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Link: https://patch.msgid.link/20250815-net-mptcp-misc-fixes-6-17-rc2-v1-5-521fe9957892@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
[ pm.c => pm_netlink.c , drop mptcp_pm_alloc_anno_list hunk ]
Signed-off-by: Sasha Levin <sashal@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
7c5f3b639b
commit
a7037057fd
|
@ -20,6 +20,8 @@ add_addr_timeout - INTEGER (seconds)
|
||||||
resent to an MPTCP peer that has not acknowledged a previous
|
resent to an MPTCP peer that has not acknowledged a previous
|
||||||
ADD_ADDR message.
|
ADD_ADDR message.
|
||||||
|
|
||||||
|
Do not retransmit if set to 0.
|
||||||
|
|
||||||
The default value matches TCP_RTO_MAX. This is a per-namespace
|
The default value matches TCP_RTO_MAX. This is a per-namespace
|
||||||
sysctl.
|
sysctl.
|
||||||
|
|
||||||
|
|
|
@ -316,6 +316,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
|
||||||
struct mptcp_pm_add_entry *entry = from_timer(entry, timer, add_timer);
|
struct mptcp_pm_add_entry *entry = from_timer(entry, timer, add_timer);
|
||||||
struct mptcp_sock *msk = entry->sock;
|
struct mptcp_sock *msk = entry->sock;
|
||||||
struct sock *sk = (struct sock *)msk;
|
struct sock *sk = (struct sock *)msk;
|
||||||
|
unsigned int timeout;
|
||||||
|
|
||||||
pr_debug("msk=%p\n", msk);
|
pr_debug("msk=%p\n", msk);
|
||||||
|
|
||||||
|
@ -333,6 +334,10 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
timeout = mptcp_get_add_addr_timeout(sock_net(sk));
|
||||||
|
if (!timeout)
|
||||||
|
goto out;
|
||||||
|
|
||||||
spin_lock_bh(&msk->pm.lock);
|
spin_lock_bh(&msk->pm.lock);
|
||||||
|
|
||||||
if (!mptcp_pm_should_add_signal_addr(msk)) {
|
if (!mptcp_pm_should_add_signal_addr(msk)) {
|
||||||
|
@ -344,7 +349,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
|
||||||
|
|
||||||
if (entry->retrans_times < ADD_ADDR_RETRANS_MAX)
|
if (entry->retrans_times < ADD_ADDR_RETRANS_MAX)
|
||||||
sk_reset_timer(sk, timer,
|
sk_reset_timer(sk, timer,
|
||||||
jiffies + mptcp_get_add_addr_timeout(sock_net(sk)));
|
jiffies + timeout);
|
||||||
|
|
||||||
spin_unlock_bh(&msk->pm.lock);
|
spin_unlock_bh(&msk->pm.lock);
|
||||||
|
|
||||||
|
@ -386,6 +391,7 @@ static bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
|
||||||
struct mptcp_pm_add_entry *add_entry = NULL;
|
struct mptcp_pm_add_entry *add_entry = NULL;
|
||||||
struct sock *sk = (struct sock *)msk;
|
struct sock *sk = (struct sock *)msk;
|
||||||
struct net *net = sock_net(sk);
|
struct net *net = sock_net(sk);
|
||||||
|
unsigned int timeout;
|
||||||
|
|
||||||
lockdep_assert_held(&msk->pm.lock);
|
lockdep_assert_held(&msk->pm.lock);
|
||||||
|
|
||||||
|
@ -403,8 +409,9 @@ static bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
|
||||||
add_entry->retrans_times = 0;
|
add_entry->retrans_times = 0;
|
||||||
|
|
||||||
timer_setup(&add_entry->add_timer, mptcp_pm_add_timer, 0);
|
timer_setup(&add_entry->add_timer, mptcp_pm_add_timer, 0);
|
||||||
sk_reset_timer(sk, &add_entry->add_timer,
|
timeout = mptcp_get_add_addr_timeout(net);
|
||||||
jiffies + mptcp_get_add_addr_timeout(net));
|
if (timeout)
|
||||||
|
sk_reset_timer(sk, &add_entry->add_timer, jiffies + timeout);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user