Commit 8cd3709b authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

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: default avatarJakub Kicinski <kuba@kernel.org>
parents 84967dee 3259889f
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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.

+4 −2
Original line number Diff line number Diff line
@@ -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));

+12 −6
Original line number Diff line number Diff line
@@ -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;
}
+0 −1
Original line number Diff line number Diff line
@@ -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;
}
+3 −2
Original line number Diff line number Diff line
@@ -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;

Loading