Skip to content

Commit 8cd3709

Browse files
committed
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 <[email protected]>
2 parents 84967de + 3259889 commit 8cd3709

File tree

9 files changed

+29
-15
lines changed

9 files changed

+29
-15
lines changed

Documentation/networking/mptcp-sysctl.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,8 @@ add_addr_timeout - INTEGER (seconds)
1212
resent to an MPTCP peer that has not acknowledged a previous
1313
ADD_ADDR message.
1414

15+
Do not retransmit if set to 0.
16+
1517
The default value matches TCP_RTO_MAX. This is a per-namespace
1618
sysctl.
1719

net/mptcp/options.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,7 +1118,9 @@ static bool add_addr_hmac_valid(struct mptcp_sock *msk,
11181118
return hmac == mp_opt->ahmac;
11191119
}
11201120

1121-
/* Return false if a subflow has been reset, else return true */
1121+
/* Return false in case of error (or subflow has been reset),
1122+
* else return true.
1123+
*/
11221124
bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
11231125
{
11241126
struct mptcp_subflow_context *subflow = mptcp_subflow_ctx(sk);
@@ -1222,7 +1224,7 @@ bool mptcp_incoming_options(struct sock *sk, struct sk_buff *skb)
12221224

12231225
mpext = skb_ext_add(skb, SKB_EXT_MPTCP);
12241226
if (!mpext)
1225-
return true;
1227+
return false;
12261228

12271229
memset(mpext, 0, sizeof(*mpext));
12281230

net/mptcp/pm.c

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -274,6 +274,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
274274
add_timer);
275275
struct mptcp_sock *msk = entry->sock;
276276
struct sock *sk = (struct sock *)msk;
277+
unsigned int timeout;
277278

278279
pr_debug("msk=%p\n", msk);
279280

@@ -291,6 +292,10 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
291292
goto out;
292293
}
293294

295+
timeout = mptcp_get_add_addr_timeout(sock_net(sk));
296+
if (!timeout)
297+
goto out;
298+
294299
spin_lock_bh(&msk->pm.lock);
295300

296301
if (!mptcp_pm_should_add_signal_addr(msk)) {
@@ -302,7 +307,7 @@ static void mptcp_pm_add_timer(struct timer_list *timer)
302307

303308
if (entry->retrans_times < ADD_ADDR_RETRANS_MAX)
304309
sk_reset_timer(sk, timer,
305-
jiffies + mptcp_get_add_addr_timeout(sock_net(sk)));
310+
jiffies + timeout);
306311

307312
spin_unlock_bh(&msk->pm.lock);
308313

@@ -344,6 +349,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
344349
struct mptcp_pm_add_entry *add_entry = NULL;
345350
struct sock *sk = (struct sock *)msk;
346351
struct net *net = sock_net(sk);
352+
unsigned int timeout;
347353

348354
lockdep_assert_held(&msk->pm.lock);
349355

@@ -353,9 +359,7 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
353359
if (WARN_ON_ONCE(mptcp_pm_is_kernel(msk)))
354360
return false;
355361

356-
sk_reset_timer(sk, &add_entry->add_timer,
357-
jiffies + mptcp_get_add_addr_timeout(net));
358-
return true;
362+
goto reset_timer;
359363
}
360364

361365
add_entry = kmalloc(sizeof(*add_entry), GFP_ATOMIC);
@@ -369,8 +373,10 @@ bool mptcp_pm_alloc_anno_list(struct mptcp_sock *msk,
369373
add_entry->retrans_times = 0;
370374

371375
timer_setup(&add_entry->add_timer, mptcp_pm_add_timer, 0);
372-
sk_reset_timer(sk, &add_entry->add_timer,
373-
jiffies + mptcp_get_add_addr_timeout(net));
376+
reset_timer:
377+
timeout = mptcp_get_add_addr_timeout(net);
378+
if (timeout)
379+
sk_reset_timer(sk, &add_entry->add_timer, jiffies + timeout);
374380

375381
return true;
376382
}

net/mptcp/pm_kernel.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1085,7 +1085,6 @@ static void __flush_addrs(struct list_head *list)
10851085
static void __reset_counters(struct pm_nl_pernet *pernet)
10861086
{
10871087
WRITE_ONCE(pernet->add_addr_signal_max, 0);
1088-
WRITE_ONCE(pernet->add_addr_accept_max, 0);
10891088
WRITE_ONCE(pernet->local_addr_max, 0);
10901089
pernet->addrs = 0;
10911090
}

tools/testing/selftests/net/mptcp/mptcp_connect.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,9 +183,10 @@ static void xgetaddrinfo(const char *node, const char *service,
183183
struct addrinfo *hints,
184184
struct addrinfo **res)
185185
{
186-
again:
187-
int err = getaddrinfo(node, service, hints, res);
186+
int err;
188187

188+
again:
189+
err = getaddrinfo(node, service, hints, res);
189190
if (err) {
190191
const char *errstr;
191192

tools/testing/selftests/net/mptcp/mptcp_inq.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,10 @@ static void xgetaddrinfo(const char *node, const char *service,
7575
struct addrinfo *hints,
7676
struct addrinfo **res)
7777
{
78-
again:
79-
int err = getaddrinfo(node, service, hints, res);
78+
int err;
8079

80+
again:
81+
err = getaddrinfo(node, service, hints, res);
8182
if (err) {
8283
const char *errstr;
8384

tools/testing/selftests/net/mptcp/mptcp_join.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3842,6 +3842,7 @@ endpoint_tests()
38423842
# remove and re-add
38433843
if reset_with_events "delete re-add signal" &&
38443844
mptcp_lib_kallsyms_has "subflow_rebuild_header$"; then
3845+
ip netns exec $ns1 sysctl -q net.mptcp.add_addr_timeout=0
38453846
pm_nl_set_limits $ns1 0 3
38463847
pm_nl_set_limits $ns2 3 3
38473848
pm_nl_add_endpoint $ns1 10.0.2.1 id 1 flags signal

tools/testing/selftests/net/mptcp/mptcp_sockopt.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,10 @@ static void xgetaddrinfo(const char *node, const char *service,
162162
struct addrinfo *hints,
163163
struct addrinfo **res)
164164
{
165-
again:
166-
int err = getaddrinfo(node, service, hints, res);
165+
int err;
167166

167+
again:
168+
err = getaddrinfo(node, service, hints, res);
168169
if (err) {
169170
const char *errstr;
170171

tools/testing/selftests/net/mptcp/pm_netlink.sh

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -198,6 +198,7 @@ set_limits 1 9 2>/dev/null
198198
check "get_limits" "${default_limits}" "subflows above hard limit"
199199

200200
set_limits 8 8
201+
flush_endpoint ## to make sure it doesn't affect the limits
201202
check "get_limits" "$(format_limits 8 8)" "set limits"
202203

203204
flush_endpoint

0 commit comments

Comments
 (0)