From: Greg Kroah-Hartman Date: Mon, 12 Aug 2024 12:44:51 +0000 (+0200) Subject: 5.10-stable patches X-Git-Tag: v6.1.105~54 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=9a9b02609adc3cbf3c96278fdffa46ae6d98b7b0;p=thirdparty%2Fkernel%2Fstable-queue.git 5.10-stable patches added patches: mptcp-distinguish-rcv-vs-sent-backup-flag-in-requests.patch mptcp-export-local_address.patch mptcp-fix-nl-pm-announced-address-accounting.patch mptcp-mib-count-mpj-with-backup-flag.patch mptcp-pm-fix-backup-support-in-signal-endpoints.patch mptcp-sched-check-both-directions-for-backup.patch --- diff --git a/queue-5.10/mptcp-distinguish-rcv-vs-sent-backup-flag-in-requests.patch b/queue-5.10/mptcp-distinguish-rcv-vs-sent-backup-flag-in-requests.patch new file mode 100644 index 00000000000..177ab6a1d91 --- /dev/null +++ b/queue-5.10/mptcp-distinguish-rcv-vs-sent-backup-flag-in-requests.patch @@ -0,0 +1,75 @@ +From stable+bounces-66249-greg=kroah.com@vger.kernel.org Fri Aug 9 12:54:48 2024 +From: "Matthieu Baerts (NGI0)" +Date: Fri, 9 Aug 2024 12:54:31 +0200 +Subject: mptcp: distinguish rcv vs sent backup flag in requests +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , "Matthieu Baerts (NGI0)" , Mat Martineau , Paolo Abeni +Message-ID: <20240809105430.2901613-2-matttbe@kernel.org> + +From: "Matthieu Baerts (NGI0)" + +commit efd340bf3d7779a3a8ec954d8ec0fb8a10f24982 upstream. + +When sending an MP_JOIN + SYN + ACK, it is possible to mark the subflow +as 'backup' by setting the flag with the same name. Before this patch, +the backup was set if the other peer set it in its MP_JOIN + SYN +request. + +It is not correct: the backup flag should be set in the MPJ+SYN+ACK only +if the host asks for it, and not mirroring what was done by the other +peer. It is then required to have a dedicated bit for each direction, +similar to what is done in the subflow context. + +Fixes: f296234c98a8 ("mptcp: Add handling of incoming MP_JOIN requests") +Cc: stable@vger.kernel.org +Reviewed-by: Mat Martineau +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Paolo Abeni +[ Conflicts in subflow.c, because the context has changed in commit + 4cf86ae84c71 ("mptcp: strict local address ID selection"), and in + commit 967d3c27127e ("mptcp: fix data races on remote_id"), which are + not in this version. These commits are unrelated to this + modification. + Same in protocol.h, with commit bab6b88e0560 ("mptcp: add + allow_join_id0 in mptcp_out_options"). ] +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/options.c | 2 +- + net/mptcp/protocol.h | 3 ++- + net/mptcp/subflow.c | 1 + + 3 files changed, 4 insertions(+), 2 deletions(-) + +--- a/net/mptcp/options.c ++++ b/net/mptcp/options.c +@@ -708,7 +708,7 @@ bool mptcp_synack_options(const struct r + return true; + } else if (subflow_req->mp_join) { + opts->suboptions = OPTION_MPTCP_MPJ_SYNACK; +- opts->backup = subflow_req->backup; ++ opts->backup = subflow_req->request_bkup; + opts->join_id = subflow_req->local_id; + opts->thmac = subflow_req->thmac; + opts->nonce = subflow_req->local_nonce; +--- a/net/mptcp/protocol.h ++++ b/net/mptcp/protocol.h +@@ -261,7 +261,8 @@ struct mptcp_subflow_request_sock { + struct tcp_request_sock sk; + u16 mp_capable : 1, + mp_join : 1, +- backup : 1; ++ backup : 1, ++ request_bkup : 1; + u8 local_id; + u8 remote_id; + u64 local_key; +--- a/net/mptcp/subflow.c ++++ b/net/mptcp/subflow.c +@@ -1395,6 +1395,7 @@ static void subflow_ulp_clone(const stru + new_ctx->mp_join = 1; + new_ctx->fully_established = 1; + new_ctx->backup = subflow_req->backup; ++ new_ctx->request_bkup = subflow_req->request_bkup; + new_ctx->local_id = subflow_req->local_id; + new_ctx->remote_id = subflow_req->remote_id; + new_ctx->token = subflow_req->token; diff --git a/queue-5.10/mptcp-export-local_address.patch b/queue-5.10/mptcp-export-local_address.patch new file mode 100644 index 00000000000..72f1431d316 --- /dev/null +++ b/queue-5.10/mptcp-export-local_address.patch @@ -0,0 +1,78 @@ +From stable+bounces-66254-greg=kroah.com@vger.kernel.org Fri Aug 9 12:55:55 2024 +From: "Matthieu Baerts (NGI0)" +Date: Fri, 9 Aug 2024 12:55:39 +0200 +Subject: mptcp: export local_address +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , Geliang Tang , Matthieu Baerts , Larysa Zaremba , Jakub Kicinski , Matthieu Baerts +Message-ID: <20240809105538.2903162-3-matttbe@kernel.org> + +From: Geliang Tang + +commit dc886bce753cc2cf3c88ec5c7a6880a4e17d65ba upstream. + +Rename local_address() with "mptcp_" prefix and export it in protocol.h. + +This function will be re-used in the common PM code (pm.c) in the +following commit. + +Signed-off-by: Geliang Tang +Reviewed-by: Matthieu Baerts +Signed-off-by: Matthieu Baerts +Reviewed-by: Larysa Zaremba +Signed-off-by: Jakub Kicinski +Stable-dep-of: 6834097fc38c ("mptcp: pm: fix backup support in signal endpoints") +[ Conflicts in pm_netlink.c and protocol.h, because the context has + changed in commit 4638de5aefe5 ("mptcp: handle local addrs announced + by userspace PMs") which is not in this version. This commit is + unrelated to this modification. Also some parts using 'local_address' + are not in this version, that's OK, we don't need to do anything with + them. ] +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/pm_netlink.c | 9 ++++----- + net/mptcp/protocol.h | 1 + + 2 files changed, 5 insertions(+), 5 deletions(-) + +--- a/net/mptcp/pm_netlink.c ++++ b/net/mptcp/pm_netlink.c +@@ -84,8 +84,7 @@ static bool address_zero(const struct mp + return addresses_equal(addr, &zero, false); + } + +-static void local_address(const struct sock_common *skc, +- struct mptcp_addr_info *addr) ++void mptcp_local_address(const struct sock_common *skc, struct mptcp_addr_info *addr) + { + addr->port = 0; + addr->family = skc->skc_family; +@@ -120,7 +119,7 @@ static bool lookup_subflow_by_saddr(cons + list_for_each_entry(subflow, list, node) { + skc = (struct sock_common *)mptcp_subflow_tcp_sock(subflow); + +- local_address(skc, &cur); ++ mptcp_local_address(skc, &cur); + if (addresses_equal(&cur, saddr, false)) + return true; + } +@@ -533,8 +532,8 @@ int mptcp_pm_nl_get_local_id(struct mptc + /* The 0 ID mapping is defined by the first subflow, copied into the msk + * addr + */ +- local_address((struct sock_common *)msk, &msk_local); +- local_address((struct sock_common *)skc, &skc_local); ++ mptcp_local_address((struct sock_common *)msk, &msk_local); ++ mptcp_local_address((struct sock_common *)skc, &skc_local); + if (addresses_equal(&msk_local, &skc_local, false)) + return 0; + +--- a/net/mptcp/protocol.h ++++ b/net/mptcp/protocol.h +@@ -372,6 +372,7 @@ void __mptcp_close_ssk(struct sock *sk, + struct mptcp_subflow_context *subflow, + long timeout); + void mptcp_subflow_reset(struct sock *ssk); ++void mptcp_local_address(const struct sock_common *skc, struct mptcp_addr_info *addr); + + /* called with sk socket lock held */ + int __mptcp_subflow_connect(struct sock *sk, const struct mptcp_addr_info *loc, diff --git a/queue-5.10/mptcp-fix-nl-pm-announced-address-accounting.patch b/queue-5.10/mptcp-fix-nl-pm-announced-address-accounting.patch new file mode 100644 index 00000000000..00f989e80fd --- /dev/null +++ b/queue-5.10/mptcp-fix-nl-pm-announced-address-accounting.patch @@ -0,0 +1,46 @@ +From stable+bounces-66251-greg=kroah.com@vger.kernel.org Fri Aug 9 12:55:06 2024 +From: "Matthieu Baerts (NGI0)" +Date: Fri, 9 Aug 2024 12:54:50 +0200 +Subject: mptcp: fix NL PM announced address accounting +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , Paolo Abeni , Matthieu Baerts , "David S . Miller" +Message-ID: <20240809105449.2902071-2-matttbe@kernel.org> + +From: Paolo Abeni + +commit 4b317e0eb287bd30a1b329513531157c25e8b692 upstream. + +Currently the per connection announced address counter is never +decreased. As a consequence, after connection establishment, if +the NL PM deletes an endpoint and adds a new/different one, no +additional subflow is created for the new endpoint even if the +current limits allow that. + +Address the issue properly updating the signaled address counter +every time the NL PM removes such addresses. + +Fixes: 01cacb00b35c ("mptcp: add netlink-based PM") +Cc: stable@vger.kernel.org +Signed-off-by: Paolo Abeni +Reviewed-by: Matthieu Baerts (NGI0) +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: David S. Miller +[ Conflicts in pm_netlink.c, because the commit 06faa2271034 ("mptcp: + remove multi addresses and subflows in PM") is not in this version. + Only the modification in mptcp_pm_remove_anno_addr() is then needed. ] +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/pm_netlink.c | 1 + + 1 file changed, 1 insertion(+) + +--- a/net/mptcp/pm_netlink.c ++++ b/net/mptcp/pm_netlink.c +@@ -759,6 +759,7 @@ static bool mptcp_pm_remove_anno_addr(st + ret = remove_anno_list_by_saddr(msk, addr); + if (ret || force) { + spin_lock_bh(&msk->pm.lock); ++ msk->pm.add_addr_signaled -= ret; + mptcp_pm_remove_addr(msk, addr->id); + spin_unlock_bh(&msk->pm.lock); + } diff --git a/queue-5.10/mptcp-mib-count-mpj-with-backup-flag.patch b/queue-5.10/mptcp-mib-count-mpj-with-backup-flag.patch new file mode 100644 index 00000000000..f2840683b87 --- /dev/null +++ b/queue-5.10/mptcp-mib-count-mpj-with-backup-flag.patch @@ -0,0 +1,87 @@ +From stable+bounces-66252-greg=kroah.com@vger.kernel.org Fri Aug 9 12:55:30 2024 +From: "Matthieu Baerts (NGI0)" +Date: Fri, 9 Aug 2024 12:55:15 +0200 +Subject: mptcp: mib: count MPJ with backup flag +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , "Matthieu Baerts (NGI0)" , Mat Martineau , Paolo Abeni +Message-ID: <20240809105514.2902623-2-matttbe@kernel.org> + +From: "Matthieu Baerts (NGI0)" + +commit 4dde0d72ccec500c60c798e036b852e013d6e124 upstream. + +Without such counters, it is difficult to easily debug issues with MPJ +not having the backup flags on production servers. + +This is not strictly a fix, but it eases to validate the following +patches without requiring to take packet traces, to query ongoing +connections with Netlink with admin permissions, or to guess by looking +at the behaviour of the packet scheduler. Also, the modification is self +contained, isolated, well controlled, and the increments are done just +after others, there from the beginning. It looks then safe, and helpful +to backport this. + +Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows") +Cc: stable@vger.kernel.org +Reviewed-by: Mat Martineau +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Paolo Abeni +[ Conflicts in subflow.c because the context has changed in + commit b3ea6b272d79 ("mptcp: consolidate initial ack seq generation") + and commit 5bc56388c74f ("mptcp: add port number check for MP_JOIN") + which are not in this version. These commits are unrelated to this + modification. ] +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/mib.c | 2 ++ + net/mptcp/mib.h | 2 ++ + net/mptcp/subflow.c | 6 ++++++ + 3 files changed, 10 insertions(+) + +--- a/net/mptcp/mib.c ++++ b/net/mptcp/mib.c +@@ -16,7 +16,9 @@ static const struct snmp_mib mptcp_snmp_ + SNMP_MIB_ITEM("MPTCPRetrans", MPTCP_MIB_RETRANSSEGS), + SNMP_MIB_ITEM("MPJoinNoTokenFound", MPTCP_MIB_JOINNOTOKEN), + SNMP_MIB_ITEM("MPJoinSynRx", MPTCP_MIB_JOINSYNRX), ++ SNMP_MIB_ITEM("MPJoinSynBackupRx", MPTCP_MIB_JOINSYNBACKUPRX), + SNMP_MIB_ITEM("MPJoinSynAckRx", MPTCP_MIB_JOINSYNACKRX), ++ SNMP_MIB_ITEM("MPJoinSynAckBackupRx", MPTCP_MIB_JOINSYNACKBACKUPRX), + SNMP_MIB_ITEM("MPJoinSynAckHMacFailure", MPTCP_MIB_JOINSYNACKMAC), + SNMP_MIB_ITEM("MPJoinAckRx", MPTCP_MIB_JOINACKRX), + SNMP_MIB_ITEM("MPJoinAckHMacFailure", MPTCP_MIB_JOINACKMAC), +--- a/net/mptcp/mib.h ++++ b/net/mptcp/mib.h +@@ -9,7 +9,9 @@ enum linux_mptcp_mib_field { + MPTCP_MIB_RETRANSSEGS, /* Segments retransmitted at the MPTCP-level */ + MPTCP_MIB_JOINNOTOKEN, /* Received MP_JOIN but the token was not found */ + MPTCP_MIB_JOINSYNRX, /* Received a SYN + MP_JOIN */ ++ MPTCP_MIB_JOINSYNBACKUPRX, /* Received a SYN + MP_JOIN + backup flag */ + MPTCP_MIB_JOINSYNACKRX, /* Received a SYN/ACK + MP_JOIN */ ++ MPTCP_MIB_JOINSYNACKBACKUPRX, /* Received a SYN/ACK + MP_JOIN + backup flag */ + MPTCP_MIB_JOINSYNACKMAC, /* HMAC was wrong on SYN/ACK + MP_JOIN */ + MPTCP_MIB_JOINACKRX, /* Received an ACK + MP_JOIN */ + MPTCP_MIB_JOINACKMAC, /* HMAC was wrong on ACK + MP_JOIN */ +--- a/net/mptcp/subflow.c ++++ b/net/mptcp/subflow.c +@@ -135,6 +135,9 @@ static void subflow_init_req(struct requ + return; + } else if (mp_opt.mp_join) { + SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINSYNRX); ++ ++ if (mp_opt.backup) ++ SUBFLOW_REQ_INC_STATS(req, MPTCP_MIB_JOINSYNBACKUPRX); + } + + if (mp_opt.mp_capable && listener->request_mptcp) { +@@ -347,6 +350,9 @@ static void subflow_finish_connect(struc + + subflow->mp_join = 1; + MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNACKRX); ++ ++ if (subflow->backup) ++ MPTCP_INC_STATS(sock_net(sk), MPTCP_MIB_JOINSYNACKBACKUPRX); + } else if (mptcp_check_fallback(sk)) { + fallback: + mptcp_rcv_space_init(mptcp_sk(parent), sk); diff --git a/queue-5.10/mptcp-pm-fix-backup-support-in-signal-endpoints.patch b/queue-5.10/mptcp-pm-fix-backup-support-in-signal-endpoints.patch new file mode 100644 index 00000000000..6ce63c7c813 --- /dev/null +++ b/queue-5.10/mptcp-pm-fix-backup-support-in-signal-endpoints.patch @@ -0,0 +1,147 @@ +From stable+bounces-66255-greg=kroah.com@vger.kernel.org Fri Aug 9 12:55:57 2024 +From: "Matthieu Baerts (NGI0)" +Date: Fri, 9 Aug 2024 12:55:40 +0200 +Subject: mptcp: pm: fix backup support in signal endpoints +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , "Matthieu Baerts (NGI0)" , Mat Martineau , Paolo Abeni +Message-ID: <20240809105538.2903162-4-matttbe@kernel.org> + +From: "Matthieu Baerts (NGI0)" + +commit 6834097fc38c5416701c793da94558cea49c0a1f upstream. + +There was a support for signal endpoints, but only when the endpoint's +flag was changed during a connection. If an endpoint with the signal and +backup was already present, the MP_JOIN reply was not containing the +backup flag as expected. + +That's confusing to have this inconsistent behaviour. On the other hand, +the infrastructure to set the backup flag in the SYN + ACK + MP_JOIN was +already there, it was just never set before. Now when requesting the +local ID from the path-manager, the backup status is also requested. + +Note that when the userspace PM is used, the backup flag can be set if +the local address was already used before with a backup flag, e.g. if +the address was announced with the 'backup' flag, or a subflow was +created with the 'backup' flag. + +Fixes: 4596a2c1b7f5 ("mptcp: allow creating non-backup subflows") +Cc: stable@vger.kernel.org +Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/507 +Reviewed-by: Mat Martineau +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Paolo Abeni +[ Conflicts in pm_userspace.c because the context has changed in commit + 1e07938e29c5 ("net: mptcp: rename netlink handlers to + mptcp_pm_nl__{doit,dumpit}") which is not in this version. This + commit is unrelated to this modification. + Conflicts in protocol.h because the context has changed in commit + 9ae7846c4b6b ("mptcp: dump addrs in userspace pm list") which is not + in this version. This commit is unrelated to this modification. + Conflicts in pm.c because the context has changed in commit + f40be0db0b76 ("mptcp: unify pm get_flags_and_ifindex_by_id") and + commit 71b7dec27f34 ("mptcp: less aggressive retransmission strategy") + which are not in this version. These commits are unrelated to this + modification. + Conflicts in subflow.c, because the commit 4cf86ae84c71 ("mptcp: + strict local address ID selection") is not in this version. It is then + not needed to modify the subflow_chk_local_id() helper, which is not + in this version. + Also, in this version, there is no pm_userspace.c, because this PM has + been added in v5.19, which also causes conflicts in protocol.h, and + pm_netlink.c. Plus the code in pm.c can be simplified, as there is no + userspace PM. And the code in pm_netlink.c needs to use + addresses_equal() instead of mptcp_addresses_equal(), see commit + 4638de5aefe5 ("mptcp: handle local addrs announced by userspace PMs"). + The code in pm_netlink.c also needs to be adapted because the + pm_nl_get_pernet_from_msk() helper is not in this version, introduced + later in commit c682bf536cf4 ("mptcp: add pm_nl_pernet helpers"), and + also because the 'flags' are in mptcp_addr_info structure, see commit + daa83ab03954 ("mptcp: move flags and ifindex out of + mptcp_addr_info"). ] +Signed-off-by: Matthieu Baerts (NGI0) + +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/pm.c | 9 +++++++++ + net/mptcp/pm_netlink.c | 20 ++++++++++++++++++++ + net/mptcp/protocol.h | 2 ++ + net/mptcp/subflow.c | 1 + + 4 files changed, 32 insertions(+) + +--- a/net/mptcp/pm.c ++++ b/net/mptcp/pm.c +@@ -225,6 +225,15 @@ int mptcp_pm_get_local_id(struct mptcp_s + return mptcp_pm_nl_get_local_id(msk, skc); + } + ++bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc) ++{ ++ struct mptcp_addr_info skc_local; ++ ++ mptcp_local_address((struct sock_common *)skc, &skc_local); ++ ++ return mptcp_pm_nl_is_backup(msk, &skc_local); ++} ++ + void mptcp_pm_data_init(struct mptcp_sock *msk) + { + msk->pm.add_addr_signaled = 0; +--- a/net/mptcp/pm_netlink.c ++++ b/net/mptcp/pm_netlink.c +@@ -568,6 +568,26 @@ int mptcp_pm_nl_get_local_id(struct mptc + return ret; + } + ++bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc) ++{ ++ struct mptcp_pm_addr_entry *entry; ++ struct pm_nl_pernet *pernet; ++ bool backup = false; ++ ++ pernet = net_generic(sock_net((struct sock *)msk), pm_nl_pernet_id); ++ ++ rcu_read_lock(); ++ list_for_each_entry_rcu(entry, &pernet->local_addr_list, list) { ++ if (addresses_equal(&entry->addr, skc, entry->addr.port)) { ++ backup = !!(entry->addr.flags & MPTCP_PM_ADDR_FLAG_BACKUP); ++ break; ++ } ++ } ++ rcu_read_unlock(); ++ ++ return backup; ++} ++ + void mptcp_pm_nl_data_init(struct mptcp_sock *msk) + { + struct mptcp_pm_data *pm = &msk->pm; +--- a/net/mptcp/protocol.h ++++ b/net/mptcp/protocol.h +@@ -481,6 +481,7 @@ bool mptcp_pm_add_addr_signal(struct mpt + bool mptcp_pm_rm_addr_signal(struct mptcp_sock *msk, unsigned int remaining, + u8 *rm_id); + int mptcp_pm_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); ++bool mptcp_pm_is_backup(struct mptcp_sock *msk, struct sock_common *skc); + + void __init mptcp_pm_nl_init(void); + void mptcp_pm_nl_data_init(struct mptcp_sock *msk); +@@ -490,6 +491,7 @@ void mptcp_pm_nl_add_addr_received(struc + void mptcp_pm_nl_rm_addr_received(struct mptcp_sock *msk); + void mptcp_pm_nl_rm_subflow_received(struct mptcp_sock *msk, u8 rm_id); + int mptcp_pm_nl_get_local_id(struct mptcp_sock *msk, struct sock_common *skc); ++bool mptcp_pm_nl_is_backup(struct mptcp_sock *msk, struct mptcp_addr_info *skc); + + static inline struct mptcp_ext *mptcp_get_ext(struct sk_buff *skb) + { +--- a/net/mptcp/subflow.c ++++ b/net/mptcp/subflow.c +@@ -80,6 +80,7 @@ static struct mptcp_sock *subflow_token_ + return NULL; + } + subflow_req->local_id = local_id; ++ subflow_req->request_bkup = mptcp_pm_is_backup(msk, (struct sock_common *)req); + + get_random_bytes(&subflow_req->local_nonce, sizeof(u32)); + diff --git a/queue-5.10/mptcp-sched-check-both-directions-for-backup.patch b/queue-5.10/mptcp-sched-check-both-directions-for-backup.patch new file mode 100644 index 00000000000..3e7899ef5cb --- /dev/null +++ b/queue-5.10/mptcp-sched-check-both-directions-for-backup.patch @@ -0,0 +1,76 @@ +From stable+bounces-66248-greg=kroah.com@vger.kernel.org Fri Aug 9 12:54:29 2024 +From: "Matthieu Baerts (NGI0)" +Date: Fri, 9 Aug 2024 12:54:13 +0200 +Subject: mptcp: sched: check both directions for backup +To: stable@vger.kernel.org, gregkh@linuxfoundation.org +Cc: MPTCP Upstream , "Matthieu Baerts (NGI0)" , Mat Martineau , Paolo Abeni +Message-ID: <20240809105412.2901173-2-matttbe@kernel.org> + +From: "Matthieu Baerts (NGI0)" + +commit b6a66e521a2032f7fcba2af5a9bcbaeaa19b7ca3 upstream. + +The 'mptcp_subflow_context' structure has two items related to the +backup flags: + + - 'backup': the subflow has been marked as backup by the other peer + + - 'request_bkup': the backup flag has been set by the host + +Before this patch, the scheduler was only looking at the 'backup' flag. +That can make sense in some cases, but it looks like that's not what we +wanted for the general use, because either the path-manager was setting +both of them when sending an MP_PRIO, or the receiver was duplicating +the 'backup' flag in the subflow request. + +Note that the use of these two flags in the path-manager are going to be +fixed in the next commits, but this change here is needed not to modify +the behaviour. + +Fixes: f296234c98a8 ("mptcp: Add handling of incoming MP_JOIN requests") +Cc: stable@vger.kernel.org +Reviewed-by: Mat Martineau +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Paolo Abeni +[ Conflicts in protocol.c, because the context has changed in commit + 3ce0852c86b9 ("mptcp: enforce HoL-blocking estimation") and in commit + 33d41c9cd74c ("mptcp: more accurate timeout"), which are not in this + version. This commit is unrelated to this modification. + Note that the tracepoint is not in this version, see commit + e10a98920976 ("mptcp: add tracepoint in mptcp_subflow_get_send"). ] +Signed-off-by: Matthieu Baerts (NGI0) +Signed-off-by: Greg Kroah-Hartman +--- + net/mptcp/protocol.c | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +--- a/net/mptcp/protocol.c ++++ b/net/mptcp/protocol.c +@@ -1124,11 +1124,13 @@ static struct sock *mptcp_subflow_get_se + send_info[i].ratio = -1; + } + mptcp_for_each_subflow(msk, subflow) { ++ bool backup = subflow->backup || subflow->request_bkup; ++ + ssk = mptcp_subflow_tcp_sock(subflow); + if (!mptcp_subflow_active(subflow)) + continue; + +- nr_active += !subflow->backup; ++ nr_active += !backup; + *sndbuf = max(tcp_sk(ssk)->snd_wnd, *sndbuf); + if (!sk_stream_memory_free(subflow->tcp_sock)) + continue; +@@ -1139,9 +1141,9 @@ static struct sock *mptcp_subflow_get_se + + ratio = div_u64((u64)READ_ONCE(ssk->sk_wmem_queued) << 32, + pace); +- if (ratio < send_info[subflow->backup].ratio) { +- send_info[subflow->backup].ssk = ssk; +- send_info[subflow->backup].ratio = ratio; ++ if (ratio < send_info[backup].ratio) { ++ send_info[backup].ssk = ssk; ++ send_info[backup].ratio = ratio; + } + } + diff --git a/queue-5.10/series b/queue-5.10/series index e2b543b2bfd..d32d6ab4079 100644 --- a/queue-5.10/series +++ b/queue-5.10/series @@ -336,3 +336,9 @@ padata-fix-possible-divide-by-0-panic-in-padata_mt_helper.patch x86-mtrr-check-if-fixed-mtrrs-exist-before-saving-them.patch drm-bridge-analogix_dp-properly-handle-zero-sized-aux-transactions.patch drm-mgag200-set-ddc-timeout-in-milliseconds.patch +mptcp-sched-check-both-directions-for-backup.patch +mptcp-distinguish-rcv-vs-sent-backup-flag-in-requests.patch +mptcp-fix-nl-pm-announced-address-accounting.patch +mptcp-mib-count-mpj-with-backup-flag.patch +mptcp-export-local_address.patch +mptcp-pm-fix-backup-support-in-signal-endpoints.patch