mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-04 20:19:47 +08:00
Merge branch 'mptcp-misc-fixes-for-v6-17-rc'
Matthieu Baerts says: ==================== mptcp: misc fixes for v6.17-rc Here are various fixes: - Patch 1: Better handling SKB extension allocation failures. A fix for v5.7. - Patches 2, 3: Avoid resetting MPTCP limits when flushing MPTCP endpoints. With a validation in the selftests. Fixes for v5.7. - Patches 4, 5, 6: Disallow '0' as ADD_ADDR retransmission timeout. With a preparation patch, and a validation in the selftests. Fixes for v5.11. - Patches 8, 9: Fix C23 extension warnings in the selftests, spotted by GCC. Fixes for v6.16. ==================== Link: https://patch.msgid.link/20250815-net-mptcp-misc-fixes-6-17-rc2-v1-0-521fe9957892@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
8cd3709b39
@ -12,6 +12,8 @@ add_addr_timeout - INTEGER (seconds)
|
||||
resent to an MPTCP peer that has not acknowledged a previous
|
||||
ADD_ADDR message.
|
||||
|
||||
Do not retransmit if set to 0.
|
||||
|
||||
The default value matches TCP_RTO_MAX. This is a per-namespace
|
||||
sysctl.
|
||||
|
||||
|
@ -1118,7 +1118,9 @@ static bool add_addr_hmac_valid(struct mptcp_sock *msk,
|
||||
return hmac == mp_opt->ahmac;
|
||||
}
|
||||
|
||||
/* Return false if a subflow has been reset, else return true */
|
||||
/* Return false in case of error (or subflow has been reset),
|
||||
* else return true.
|
||||
*/
|
||||
bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
|
||||
{
|
||||
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
|
||||
@ -1222,7 +1224,7 @@ bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
|
||||
|
||||
mpext = skb_ext_add(skb, SKB_EXT_MPTCP);
|
||||
if (!mpext)
|
||||
return true;
|
||||
return false;
|
||||
|
||||
memset(mpext, 0, sizeof(*mpext));
|
||||
|
||||
|
@ -274,6 +274,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
|
||||
add_timer);
|
||||
struct mptcp_sock *msk = entry->sock;
|
||||
struct sock *sk = (struct sock *)msk;
|
||||
unsigned int timeout;
|
||||
|
||||
pr_debug("msk=%p\n", msk);
|
||||
|
||||
@ -291,6 +292,10 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
|
||||
goto out;
|
||||
}
|
||||
|
||||
timeout = mptcp_get_add_addr_timeout(sock_net(sk));
|
||||
if (!timeout)
|
||||
goto out;
|
||||
|
||||
spin_lock_bh(&msk->pm.lock);
|
||||
|
||||
if (!mptcp_pm_should_add_signal_addr(msk)) {
|
||||
@ -302,7 +307,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
|
||||
|
||||
if (entry->retrans_times < ADD_ADDR_RETRANS_MAX)
|
||||
sk_reset_timer(sk, timer,
|
||||
jiffies + mptcp_get_add_addr_timeout(sock_net(sk)));
|
||||
jiffies + timeout);
|
||||
|
||||
spin_unlock_bh(&msk->pm.lock);
|
||||
|
||||
@ -344,6 +349,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
|
||||
struct mptcp_pm_add_entry *add_entry = NULL;
|
||||
struct sock *sk = (struct sock *)msk;
|
||||
struct net *net = sock_net(sk);
|
||||
unsigned int timeout;
|
||||
|
||||
lockdep_assert_held(&msk->pm.lock);
|
||||
|
||||
@ -353,9 +359,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
|
||||
if (WARN_ON_ONCE(mptcp_pm_is_kernel(msk)))
|
||||
return false;
|
||||
|
||||
sk_reset_timer(sk, &add_entry->add_timer,
|
||||
jiffies + mptcp_get_add_addr_timeout(net));
|
||||
return true;
|
||||
goto reset_timer;
|
||||
}
|
||||
|
||||
add_entry = kmalloc(sizeof(*add_entry), GFP_ATOMIC);
|
||||
@ -369,8 +373,10 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
|
||||
add_entry->retrans_times = 0;
|
||||
|
||||
timer_setup(&add_entry->add_timer, mptcp_pm_add_timer, 0);
|
||||
sk_reset_timer(sk, &add_entry->add_timer,
|
||||
jiffies + mptcp_get_add_addr_timeout(net));
|
||||
reset_timer:
|
||||
timeout = mptcp_get_add_addr_timeout(net);
|
||||
if (timeout)
|
||||
sk_reset_timer(sk, &add_entry->add_timer, jiffies + timeout);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -1085,7 +1085,6 @@ static void __flush_addrs(struct list_head *list)
|
||||
static void __reset_counters(struct pm_nl_pernet *pernet)
|
||||
{
|
||||
WRITE_ONCE(pernet->add_addr_signal_max, 0);
|
||||
WRITE_ONCE(pernet->add_addr_accept_max, 0);
|
||||
WRITE_ONCE(pernet->local_addr_max, 0);
|
||||
pernet->addrs = 0;
|
||||
}
|
||||
|
@ -183,9 +183,10 @@ static void xgetaddrinfo(const char *node, const char *service,
|
||||
struct addrinfo *hints,
|
||||
struct addrinfo **res)
|
||||
{
|
||||
again:
|
||||
int err = getaddrinfo(node, service, hints, res);
|
||||
int err;
|
||||
|
||||
again:
|
||||
err = getaddrinfo(node, service, hints, res);
|
||||
if (err) {
|
||||
const char *errstr;
|
||||
|
||||
|
@ -75,9 +75,10 @@ static void xgetaddrinfo(const char *node, const char *service,
|
||||
struct addrinfo *hints,
|
||||
struct addrinfo **res)
|
||||
{
|
||||
again:
|
||||
int err = getaddrinfo(node, service, hints, res);
|
||||
int err;
|
||||
|
||||
again:
|
||||
err = getaddrinfo(node, service, hints, res);
|
||||
if (err) {
|
||||
const char *errstr;
|
||||
|
||||
|
@ -3842,6 +3842,7 @@ endpoint_tests()
|
||||
# remove and re-add
|
||||
if reset_with_events "delete re-add signal" &&
|
||||
mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then
|
||||
ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=0
|
||||
pm_nl_set_limits $ns1 0 3
|
||||
pm_nl_set_limits $ns2 3 3
|
||||
pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal
|
||||
|
@ -162,9 +162,10 @@ static void xgetaddrinfo(const char *node, const char *service,
|
||||
struct addrinfo *hints,
|
||||
struct addrinfo **res)
|
||||
{
|
||||
again:
|
||||
int err = getaddrinfo(node, service, hints, res);
|
||||
int err;
|
||||
|
||||
again:
|
||||
err = getaddrinfo(node, service, hints, res);
|
||||
if (err) {
|
||||
const char *errstr;
|
||||
|
||||
|
@ -198,6 +198,7 @@ set_limits 1 9 2>/dev/null
|
||||
check "get_limits" "${default_limits}" "subflows above hard limit"
|
||||
|
||||
set_limits 8 8
|
||||
flush_endpoint ## to make sure it doesn't affect the limits
|
||||
check "get_limits" "$(format_limits 8 8)" "set limits"
|
||||
|
||||
flush_endpoint
|
||||
|
Loading…
Reference in New Issue
Block a user