Skip to content

Commit ccab044

Browse files
cpaasch-oaikuba-moo
authored andcommitted
mptcp: drop skb if MPTCP skb extension allocation fails
When skb_ext_add(skb, SKB_EXT_MPTCP) fails in mptcp_incoming_options(), we used to return true, letting the segment proceed through the TCP receive path without a DSS mapping. Such segments can leave inconsistent mapping state and trigger a mid-stream fallback to TCP, which in testing collapsed (by artificially forcing failures in skb_ext_add) throughput to zero. Return false instead so the TCP input path drops the skb (see tcp_data_queue() and step-7 processing). This is the safer choice under memory pressure: it preserves MPTCP correctness and provides backpressure to the sender. Control packets remain unaffected: ACK updates and DATA_FIN handling happen before attempting the extension allocation, and tcp_reset() continues to ignore the return value. With this change, MPTCP continues to work at high throughput if we artificially inject failures into skb_ext_add. Fixes: 6787b7e ("mptcp: avoid processing packet if a subflow reset") Cc: [email protected] Signed-off-by: Christoph Paasch <[email protected]> Reviewed-by: Matthieu Baerts (NGI0) <[email protected]> Signed-off-by: Matthieu Baerts (NGI0) <[email protected]> Link: https://patch.msgid.link/20250815-net-mptcp-misc-fixes-6-17-rc2-v1-1-521fe9957892@kernel.org Signed-off-by: Jakub Kicinski <[email protected]>
1 parent 84967de commit ccab044

File tree

1 file changed

+4
-2
lines changed

1 file changed

+4
-2
lines changed

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

0 commit comments

Comments
 (0)