]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
5.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Aug 2024 12:44:51 +0000 (14:44 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 12 Aug 2024 12:44:51 +0000 (14:44 +0200)
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

queue-5.10/mptcp-distinguish-rcv-vs-sent-backup-flag-in-requests.patch [new file with mode: 0644]
queue-5.10/mptcp-export-local_address.patch [new file with mode: 0644]
queue-5.10/mptcp-fix-nl-pm-announced-address-accounting.patch [new file with mode: 0644]
queue-5.10/mptcp-mib-count-mpj-with-backup-flag.patch [new file with mode: 0644]
queue-5.10/mptcp-pm-fix-backup-support-in-signal-endpoints.patch [new file with mode: 0644]
queue-5.10/mptcp-sched-check-both-directions-for-backup.patch [new file with mode: 0644]
queue-5.10/series

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 (file)
index 0000000..177ab6a
--- /dev/null
@@ -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)" <matttbe@kernel.org>
+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 <mptcp@lists.linux.dev>, "Matthieu Baerts (NGI0)" <matttbe@kernel.org>, Mat Martineau <martineau@kernel.org>, Paolo Abeni <pabeni@redhat.com>
+Message-ID: <20240809105430.2901613-2-matttbe@kernel.org>
+
+From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org>
+
+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 <martineau@kernel.org>
+Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+[ 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) <matttbe@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..72f1431
--- /dev/null
@@ -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)" <matttbe@kernel.org>
+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 <mptcp@lists.linux.dev>, Geliang Tang <geliang.tang@suse.com>, Matthieu Baerts <matthieu.baerts@tessares.net>, Larysa Zaremba <larysa.zaremba@intel.com>, Jakub Kicinski <kuba@kernel.org>, Matthieu Baerts <matttbe@kernel.org>
+Message-ID: <20240809105538.2903162-3-matttbe@kernel.org>
+
+From: Geliang Tang <geliang.tang@suse.com>
+
+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 <geliang.tang@suse.com>
+Reviewed-by: Matthieu Baerts <matthieu.baerts@tessares.net>
+Signed-off-by: Matthieu Baerts <matthieu.baerts@tessares.net>
+Reviewed-by: Larysa Zaremba <larysa.zaremba@intel.com>
+Signed-off-by: Jakub Kicinski <kuba@kernel.org>
+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) <matttbe@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..00f989e
--- /dev/null
@@ -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)" <matttbe@kernel.org>
+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 <mptcp@lists.linux.dev>, Paolo Abeni <pabeni@redhat.com>, Matthieu Baerts <matttbe@kernel.org>, "David S . Miller" <davem@davemloft.net>
+Message-ID: <20240809105449.2902071-2-matttbe@kernel.org>
+
+From: Paolo Abeni <pabeni@redhat.com>
+
+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 <pabeni@redhat.com>
+Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
+Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+[ 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) <matttbe@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..f284068
--- /dev/null
@@ -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)" <matttbe@kernel.org>
+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 <mptcp@lists.linux.dev>, "Matthieu Baerts (NGI0)" <matttbe@kernel.org>, Mat Martineau <martineau@kernel.org>, Paolo Abeni <pabeni@redhat.com>
+Message-ID: <20240809105514.2902623-2-matttbe@kernel.org>
+
+From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org>
+
+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 <martineau@kernel.org>
+Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+[ 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) <matttbe@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..6ce63c7
--- /dev/null
@@ -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)" <matttbe@kernel.org>
+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 <mptcp@lists.linux.dev>, "Matthieu Baerts (NGI0)" <matttbe@kernel.org>, Mat Martineau <martineau@kernel.org>, Paolo Abeni <pabeni@redhat.com>
+Message-ID: <20240809105538.2903162-4-matttbe@kernel.org>
+
+From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org>
+
+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 <martineau@kernel.org>
+Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+[ Conflicts in pm_userspace.c because the context has changed in commit
+  1e07938e29c5 ("net: mptcp: rename netlink handlers to
+  mptcp_pm_nl_<blah>_{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) <matttbe@kernel.org>
+
+Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 (file)
index 0000000..3e7899e
--- /dev/null
@@ -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)" <matttbe@kernel.org>
+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 <mptcp@lists.linux.dev>, "Matthieu Baerts (NGI0)" <matttbe@kernel.org>, Mat Martineau <martineau@kernel.org>, Paolo Abeni <pabeni@redhat.com>
+Message-ID: <20240809105412.2901173-2-matttbe@kernel.org>
+
+From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org>
+
+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 <martineau@kernel.org>
+Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
+Signed-off-by: Paolo Abeni <pabeni@redhat.com>
+[ 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) <matttbe@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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;
+               }
+       }
index e2b543b2bfd46be7eaafdc5d11d8e998ac3e0b01..d32d6ab4079fefcc75083d82205529b5b8d8fdcb 100644 (file)
@@ -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