* [PATCH 6.6.y 0/6] mptcp: fix recent failed backports
@ 2024-11-18 18:27 Matthieu Baerts (NGI0)
2024-11-19 12:31 ` Sasha Levin
` (6 more replies)
0 siblings, 7 replies; 21+ messages in thread
From: Matthieu Baerts (NGI0) @ 2024-11-18 18:27 UTC (permalink / raw)
To: mptcp, stable, gregkh; +Cc: Matthieu Baerts (NGI0), sashal
Greg recently reported 3 patches that could not be applied without
conflict in v6.6:
- e0266319413d ("mptcp: update local address flags when setting it")
- f642c5c4d528 ("mptcp: hold pm lock when deleting entry")
- db3eab8110bc ("mptcp: pm: use _rcu variant under rcu_read_lock")
Conflicts, if any, have been resolved, and documented in each patch.
Note that there are 3 extra patches added to avoid some conflicts:
- 14cb0e0bf39b ("mptcp: define more local variables sk")
- 06afe09091ee ("mptcp: add userspace_pm_lookup_addr_by_id helper")
- af250c27ea1c ("mptcp: drop lookup_by_id in lookup_addr")
The Stable-dep-of tags have been added to these patches.
Geliang Tang (5):
mptcp: define more local variables sk
mptcp: add userspace_pm_lookup_addr_by_id helper
mptcp: update local address flags when setting it
mptcp: hold pm lock when deleting entry
mptcp: drop lookup_by_id in lookup_addr
Matthieu Baerts (NGI0) (1):
mptcp: pm: use _rcu variant under rcu_read_lock
net/mptcp/pm_netlink.c | 15 ++++----
net/mptcp/pm_userspace.c | 77 ++++++++++++++++++++++++++--------------
2 files changed, 58 insertions(+), 34 deletions(-)
--
2.45.2
^ permalink raw reply [flat|nested] 21+ messages in thread* [PATCH 6.6.y 1/6] mptcp: define more local variables sk @ 2024-11-19 12:31 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Matthieu Baerts (NGI0) @ 2024-11-18 18:27 UTC (permalink / raw) To: mptcp, stable, gregkh Cc: Geliang Tang, sashal, Matthieu Baerts, Mat Martineau, Jakub Kicinski From: Geliang Tang <geliang.tang@suse.com> commit 14cb0e0bf39bd10429ba14e9e2f905f1144226fc upstream. '(struct sock *)msk' is used several times in mptcp_nl_cmd_announce(), mptcp_nl_cmd_remove() or mptcp_userspace_pm_set_flags() in pm_userspace.c, it's worth adding a local variable sk to point it. Reviewed-by: Matthieu Baerts <matttbe@kernel.org> Signed-off-by: Geliang Tang <geliang.tang@suse.com> Signed-off-by: Mat Martineau <martineau@kernel.org> Link: https://lore.kernel.org/r/20231025-send-net-next-20231025-v1-8-db8f25f798eb@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Stable-dep-of: 06afe09091ee ("mptcp: add userspace_pm_lookup_addr_by_id helper") Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_userspace.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index e097b6a7b816..eded0f9c0b6f 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -183,6 +183,7 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info) struct mptcp_pm_addr_entry addr_val; struct mptcp_sock *msk; int err = -EINVAL; + struct sock *sk; u32 token_val; if (!addr || !token) { @@ -198,6 +199,8 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info) return err; } + sk = (struct sock *)msk; + if (!mptcp_pm_is_userspace(msk)) { GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); goto announce_err; @@ -221,7 +224,7 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info) goto announce_err; } - lock_sock((struct sock *)msk); + lock_sock(sk); spin_lock_bh(&msk->pm.lock); if (mptcp_pm_alloc_anno_list(msk, &addr_val.addr)) { @@ -231,11 +234,11 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info) } spin_unlock_bh(&msk->pm.lock); - release_sock((struct sock *)msk); + release_sock(sk); err = 0; announce_err: - sock_put((struct sock *)msk); + sock_put(sk); return err; } @@ -282,6 +285,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) struct mptcp_sock *msk; LIST_HEAD(free_list); int err = -EINVAL; + struct sock *sk; u32 token_val; u8 id_val; @@ -299,6 +303,8 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) return err; } + sk = (struct sock *)msk; + if (!mptcp_pm_is_userspace(msk)) { GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); goto remove_err; @@ -309,7 +315,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) goto remove_err; } - lock_sock((struct sock *)msk); + lock_sock(sk); list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { if (entry->addr.id == id_val) { @@ -320,7 +326,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) if (!match) { GENL_SET_ERR_MSG(info, "address with specified id not found"); - release_sock((struct sock *)msk); + release_sock(sk); goto remove_err; } @@ -328,15 +334,15 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) mptcp_pm_remove_addrs(msk, &free_list); - release_sock((struct sock *)msk); + release_sock(sk); list_for_each_entry_safe(match, entry, &free_list, list) { - sock_kfree_s((struct sock *)msk, match, sizeof(*match)); + sock_kfree_s(sk, match, sizeof(*match)); } err = 0; remove_err: - sock_put((struct sock *)msk); + sock_put(sk); return err; } @@ -558,6 +564,7 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, { struct mptcp_sock *msk; int ret = -EINVAL; + struct sock *sk; u32 token_val; token_val = nla_get_u32(token); @@ -566,6 +573,8 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, if (!msk) return ret; + sk = (struct sock *)msk; + if (!mptcp_pm_is_userspace(msk)) goto set_flags_err; @@ -573,11 +582,11 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, rem->addr.family == AF_UNSPEC) goto set_flags_err; - lock_sock((struct sock *)msk); + lock_sock(sk); ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc->addr, &rem->addr, bkup); - release_sock((struct sock *)msk); + release_sock(sk); set_flags_err: - sock_put((struct sock *)msk); + sock_put(sk); return ret; } -- 2.45.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 6.6.y 1/6] mptcp: define more local variables sk @ 2024-11-19 12:31 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Sasha Levin @ 2024-11-19 12:31 UTC (permalink / raw) To: stable; +Cc: Matthieu Baerts (NGI0), Sasha Levin [ Sasha's backport helper bot ] Hi, The upstream commit SHA1 provided is correct: 14cb0e0bf39bd10429ba14e9e2f905f1144226fc WARNING: Author mismatch between patch and upstream commit: Backport author: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Commit author: Geliang Tang <geliang.tang@suse.com> Commit in newer trees: |-----------------|----------------------------------------------| | 6.11.y | Present (exact SHA1) | | 6.6.y | Not found | |-----------------|----------------------------------------------| Note: The patch differs from the upstream commit: --- --- - 2024-11-19 00:58:03.542379932 -0500 +++ /tmp/tmp.teBe5VO7C3 2024-11-19 00:58:03.540289647 -0500 @@ -1,3 +1,5 @@ +commit 14cb0e0bf39bd10429ba14e9e2f905f1144226fc upstream. + '(struct sock *)msk' is used several times in mptcp_nl_cmd_announce(), mptcp_nl_cmd_remove() or mptcp_userspace_pm_set_flags() in pm_userspace.c, it's worth adding a local variable sk to point it. @@ -7,15 +9,17 @@ Signed-off-by: Mat Martineau <martineau@kernel.org> Link: https://lore.kernel.org/r/20231025-send-net-next-20231025-v1-8-db8f25f798eb@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> +Stable-dep-of: 06afe09091ee ("mptcp: add userspace_pm_lookup_addr_by_id helper") +Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_userspace.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c -index 7bb2b29e5b964..5c01b9bc619a8 100644 +index e097b6a7b816..eded0f9c0b6f 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c -@@ -152,6 +152,7 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) +@@ -183,6 +183,7 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info) struct mptcp_pm_addr_entry addr_val; struct mptcp_sock *msk; int err = -EINVAL; @@ -23,7 +27,7 @@ u32 token_val; if (!addr || !token) { -@@ -167,6 +168,8 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) +@@ -198,6 +199,8 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info) return err; } @@ -32,7 +36,7 @@ if (!mptcp_pm_is_userspace(msk)) { GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); goto announce_err; -@@ -190,7 +193,7 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) +@@ -221,7 +224,7 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info) goto announce_err; } @@ -41,7 +45,7 @@ spin_lock_bh(&msk->pm.lock); if (mptcp_pm_alloc_anno_list(msk, &addr_val.addr)) { -@@ -200,11 +203,11 @@ int mptcp_pm_nl_announce_doit(struct sk_buff *skb, struct genl_info *info) +@@ -231,11 +234,11 @@ int mptcp_nl_cmd_announce(struct sk_buff *skb, struct genl_info *info) } spin_unlock_bh(&msk->pm.lock); @@ -55,7 +59,7 @@ return err; } -@@ -251,6 +254,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) +@@ -282,6 +285,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) struct mptcp_sock *msk; LIST_HEAD(free_list); int err = -EINVAL; @@ -63,7 +67,7 @@ u32 token_val; u8 id_val; -@@ -268,6 +272,8 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) +@@ -299,6 +303,8 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) return err; } @@ -72,7 +76,7 @@ if (!mptcp_pm_is_userspace(msk)) { GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); goto remove_err; -@@ -278,7 +284,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) +@@ -309,7 +315,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) goto remove_err; } @@ -81,7 +85,7 @@ list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { if (entry->addr.id == id_val) { -@@ -289,7 +295,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) +@@ -320,7 +326,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) if (!match) { GENL_SET_ERR_MSG(info, "address with specified id not found"); @@ -90,7 +94,7 @@ goto remove_err; } -@@ -297,15 +303,15 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) +@@ -328,15 +334,15 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) mptcp_pm_remove_addrs(msk, &free_list); @@ -109,7 +113,7 @@ return err; } -@@ -518,6 +524,7 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, +@@ -558,6 +564,7 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, { struct mptcp_sock *msk; int ret = -EINVAL; @@ -117,7 +121,7 @@ u32 token_val; token_val = nla_get_u32(token); -@@ -526,6 +533,8 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, +@@ -566,6 +573,8 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, if (!msk) return ret; @@ -126,7 +130,7 @@ if (!mptcp_pm_is_userspace(msk)) goto set_flags_err; -@@ -533,11 +542,11 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, +@@ -573,11 +582,11 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, rem->addr.family == AF_UNSPEC) goto set_flags_err; @@ -141,3 +145,6 @@ + sock_put(sk); return ret; } +-- +2.45.2 + --- Results of testing on various branches: | Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-6.6.y | Success | Success | ^ permalink raw reply [flat|nested] 21+ messages in thread
* Patch "mptcp: define more local variables sk" has been added to the 6.6-stable tree 2024-11-19 12:31 ` Sasha Levin (?) @ 2024-11-19 13:02 ` gregkh -1 siblings, 0 replies; 21+ messages in thread From: gregkh @ 2024-11-19 13:02 UTC (permalink / raw) To: geliang.tang, gregkh, kuba, martineau, matttbe, mptcp, sashal Cc: stable-commits This is a note to let you know that I've just added the patch titled mptcp: define more local variables sk to the 6.6-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: mptcp-define-more-local-variables-sk.patch and it can be found in the queue-6.6 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@vger.kernel.org> know about it. From stable+bounces-93822-greg=kroah.com@vger.kernel.org Mon Nov 18 19:27:52 2024 From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Date: Mon, 18 Nov 2024 19:27:19 +0100 Subject: mptcp: define more local variables sk To: mptcp@lists.linux.dev, stable@vger.kernel.org, gregkh@linuxfoundation.org Cc: Geliang Tang <geliang.tang@suse.com>, sashal@kernel.org, Matthieu Baerts <matttbe@kernel.org>, Mat Martineau <martineau@kernel.org>, Jakub Kicinski <kuba@kernel.org> Message-ID: <20241118182718.3011097-9-matttbe@kernel.org> From: Geliang Tang <geliang.tang@suse.com> commit 14cb0e0bf39bd10429ba14e9e2f905f1144226fc upstream. '(struct sock *)msk' is used several times in mptcp_nl_cmd_announce(), mptcp_nl_cmd_remove() or mptcp_userspace_pm_set_flags() in pm_userspace.c, it's worth adding a local variable sk to point it. Reviewed-by: Matthieu Baerts <matttbe@kernel.org> Signed-off-by: Geliang Tang <geliang.tang@suse.com> Signed-off-by: Mat Martineau <martineau@kernel.org> Link: https://lore.kernel.org/r/20231025-send-net-next-20231025-v1-8-db8f25f798eb@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Stable-dep-of: 06afe09091ee ("mptcp: add userspace_pm_lookup_addr_by_id helper") Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- net/mptcp/pm_userspace.c | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -183,6 +183,7 @@ int mptcp_nl_cmd_announce(struct sk_buff struct mptcp_pm_addr_entry addr_val; struct mptcp_sock *msk; int err = -EINVAL; + struct sock *sk; u32 token_val; if (!addr || !token) { @@ -198,6 +199,8 @@ int mptcp_nl_cmd_announce(struct sk_buff return err; } + sk = (struct sock *)msk; + if (!mptcp_pm_is_userspace(msk)) { GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); goto announce_err; @@ -221,7 +224,7 @@ int mptcp_nl_cmd_announce(struct sk_buff goto announce_err; } - lock_sock((struct sock *)msk); + lock_sock(sk); spin_lock_bh(&msk->pm.lock); if (mptcp_pm_alloc_anno_list(msk, &addr_val.addr)) { @@ -231,11 +234,11 @@ int mptcp_nl_cmd_announce(struct sk_buff } spin_unlock_bh(&msk->pm.lock); - release_sock((struct sock *)msk); + release_sock(sk); err = 0; announce_err: - sock_put((struct sock *)msk); + sock_put(sk); return err; } @@ -282,6 +285,7 @@ int mptcp_nl_cmd_remove(struct sk_buff * struct mptcp_sock *msk; LIST_HEAD(free_list); int err = -EINVAL; + struct sock *sk; u32 token_val; u8 id_val; @@ -299,6 +303,8 @@ int mptcp_nl_cmd_remove(struct sk_buff * return err; } + sk = (struct sock *)msk; + if (!mptcp_pm_is_userspace(msk)) { GENL_SET_ERR_MSG(info, "invalid request; userspace PM not selected"); goto remove_err; @@ -309,7 +315,7 @@ int mptcp_nl_cmd_remove(struct sk_buff * goto remove_err; } - lock_sock((struct sock *)msk); + lock_sock(sk); list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { if (entry->addr.id == id_val) { @@ -320,7 +326,7 @@ int mptcp_nl_cmd_remove(struct sk_buff * if (!match) { GENL_SET_ERR_MSG(info, "address with specified id not found"); - release_sock((struct sock *)msk); + release_sock(sk); goto remove_err; } @@ -328,15 +334,15 @@ int mptcp_nl_cmd_remove(struct sk_buff * mptcp_pm_remove_addrs(msk, &free_list); - release_sock((struct sock *)msk); + release_sock(sk); list_for_each_entry_safe(match, entry, &free_list, list) { - sock_kfree_s((struct sock *)msk, match, sizeof(*match)); + sock_kfree_s(sk, match, sizeof(*match)); } err = 0; remove_err: - sock_put((struct sock *)msk); + sock_put(sk); return err; } @@ -558,6 +564,7 @@ int mptcp_userspace_pm_set_flags(struct { struct mptcp_sock *msk; int ret = -EINVAL; + struct sock *sk; u32 token_val; token_val = nla_get_u32(token); @@ -566,6 +573,8 @@ int mptcp_userspace_pm_set_flags(struct if (!msk) return ret; + sk = (struct sock *)msk; + if (!mptcp_pm_is_userspace(msk)) goto set_flags_err; @@ -573,11 +582,11 @@ int mptcp_userspace_pm_set_flags(struct rem->addr.family == AF_UNSPEC) goto set_flags_err; - lock_sock((struct sock *)msk); + lock_sock(sk); ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc->addr, &rem->addr, bkup); - release_sock((struct sock *)msk); + release_sock(sk); set_flags_err: - sock_put((struct sock *)msk); + sock_put(sk); return ret; } Patches currently in stable-queue which might be from matttbe@kernel.org are queue-6.6/mptcp-pm-use-_rcu-variant-under-rcu_read_lock.patch queue-6.6/mptcp-error-out-earlier-on-disconnect.patch queue-6.6/mptcp-hold-pm-lock-when-deleting-entry.patch queue-6.6/mptcp-cope-racing-subflow-creation-in-mptcp_rcv_spac.patch queue-6.6/mptcp-drop-lookup_by_id-in-lookup_addr.patch queue-6.6/mptcp-add-userspace_pm_lookup_addr_by_id-helper.patch queue-6.6/mptcp-define-more-local-variables-sk.patch queue-6.6/mptcp-update-local-address-flags-when-setting-it.patch ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 6.6.y 2/6] mptcp: add userspace_pm_lookup_addr_by_id helper @ 2024-11-19 12:31 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Matthieu Baerts (NGI0) @ 2024-11-18 18:27 UTC (permalink / raw) To: mptcp, stable, gregkh Cc: Geliang Tang, sashal, Matthieu Baerts, Mat Martineau, David S . Miller From: Geliang Tang <tanggeliang@kylinos.cn> commit 06afe09091ee69dc7ab058b4be9917ae59cc81e5 upstream. Corresponding __lookup_addr_by_id() helper in the in-kernel netlink PM, this patch adds a new helper mptcp_userspace_pm_lookup_addr_by_id() to lookup the address entry with the given id on the userspace pm local address list. Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Reviewed-by: Mat Martineau <martineau@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net> Stable-dep-of: f642c5c4d528 ("mptcp: hold pm lock when deleting entry") Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_userspace.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index eded0f9c0b6f..23e362c11801 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -107,19 +107,26 @@ static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk, return -EINVAL; } +static struct mptcp_pm_addr_entry * +mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id) +{ + struct mptcp_pm_addr_entry *entry; + + list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { + if (entry->addr.id == id) + return entry; + } + return NULL; +} + int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id, u8 *flags, int *ifindex) { - struct mptcp_pm_addr_entry *entry, *match = NULL; + struct mptcp_pm_addr_entry *match; spin_lock_bh(&msk->pm.lock); - list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { - if (id == entry->addr.id) { - match = entry; - break; - } - } + match = mptcp_userspace_pm_lookup_addr_by_id(msk, id); spin_unlock_bh(&msk->pm.lock); if (match) { *flags = match->flags; @@ -280,7 +287,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) { struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN]; struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID]; - struct mptcp_pm_addr_entry *match = NULL; + struct mptcp_pm_addr_entry *match; struct mptcp_pm_addr_entry *entry; struct mptcp_sock *msk; LIST_HEAD(free_list); @@ -317,13 +324,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) lock_sock(sk); - list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { - if (entry->addr.id == id_val) { - match = entry; - break; - } - } - + match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val); if (!match) { GENL_SET_ERR_MSG(info, "address with specified id not found"); release_sock(sk); -- 2.45.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 6.6.y 2/6] mptcp: add userspace_pm_lookup_addr_by_id helper @ 2024-11-19 12:31 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Sasha Levin @ 2024-11-19 12:31 UTC (permalink / raw) To: stable; +Cc: Matthieu Baerts (NGI0), Sasha Levin [ Sasha's backport helper bot ] Hi, The upstream commit SHA1 provided is correct: 06afe09091ee69dc7ab058b4be9917ae59cc81e5 WARNING: Author mismatch between patch and upstream commit: Backport author: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Commit author: Geliang Tang <tanggeliang@kylinos.cn> Commit in newer trees: |-----------------|----------------------------------------------| | 6.11.y | Present (exact SHA1) | | 6.6.y | Not found | |-----------------|----------------------------------------------| Note: The patch differs from the upstream commit: --- --- - 2024-11-19 01:03:18.229030137 -0500 +++ /tmp/tmp.cXmNHAm0RR 2024-11-19 01:03:18.223800931 -0500 @@ -1,3 +1,5 @@ +commit 06afe09091ee69dc7ab058b4be9917ae59cc81e5 upstream. + Corresponding __lookup_addr_by_id() helper in the in-kernel netlink PM, this patch adds a new helper mptcp_userspace_pm_lookup_addr_by_id() to lookup the address entry with the given id on the userspace pm local @@ -8,15 +10,17 @@ Reviewed-by: Mat Martineau <martineau@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net> +Stable-dep-of: f642c5c4d528 ("mptcp: hold pm lock when deleting entry") +Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_userspace.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c -index 3bd13e94b5687..20cbcb62cd8c5 100644 +index eded0f9c0b6f..23e362c11801 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c -@@ -106,19 +106,26 @@ static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk, +@@ -107,19 +107,26 @@ static int mptcp_userspace_pm_delete_local_addr(struct mptcp_sock *msk, return -EINVAL; } @@ -50,7 +54,7 @@ spin_unlock_bh(&msk->pm.lock); if (match) { *flags = match->flags; -@@ -261,7 +268,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) +@@ -280,7 +287,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) { struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN]; struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID]; @@ -59,7 +63,7 @@ struct mptcp_pm_addr_entry *entry; struct mptcp_sock *msk; LIST_HEAD(free_list); -@@ -298,13 +305,7 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) +@@ -317,13 +324,7 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) lock_sock(sk); @@ -74,3 +78,6 @@ if (!match) { GENL_SET_ERR_MSG(info, "address with specified id not found"); release_sock(sk); +-- +2.45.2 + --- Results of testing on various branches: | Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-6.6.y | Success | Success | ^ permalink raw reply [flat|nested] 21+ messages in thread
* Patch "mptcp: add userspace_pm_lookup_addr_by_id helper" has been added to the 6.6-stable tree 2024-11-19 12:31 ` Sasha Levin (?) @ 2024-11-19 13:02 ` gregkh -1 siblings, 0 replies; 21+ messages in thread From: gregkh @ 2024-11-19 13:02 UTC (permalink / raw) To: davem, gregkh, martineau, matttbe, mptcp, sashal, tanggeliang Cc: stable-commits This is a note to let you know that I've just added the patch titled mptcp: add userspace_pm_lookup_addr_by_id helper to the 6.6-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: mptcp-add-userspace_pm_lookup_addr_by_id-helper.patch and it can be found in the queue-6.6 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@vger.kernel.org> know about it. From stable+bounces-93823-greg=kroah.com@vger.kernel.org Mon Nov 18 19:27:51 2024 From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Date: Mon, 18 Nov 2024 19:27:20 +0100 Subject: mptcp: add userspace_pm_lookup_addr_by_id helper To: mptcp@lists.linux.dev, stable@vger.kernel.org, gregkh@linuxfoundation.org Cc: Geliang Tang <tanggeliang@kylinos.cn>, sashal@kernel.org, Matthieu Baerts <matttbe@kernel.org>, Mat Martineau <martineau@kernel.org>, "David S . Miller" <davem@davemloft.net> Message-ID: <20241118182718.3011097-10-matttbe@kernel.org> From: Geliang Tang <tanggeliang@kylinos.cn> commit 06afe09091ee69dc7ab058b4be9917ae59cc81e5 upstream. Corresponding __lookup_addr_by_id() helper in the in-kernel netlink PM, this patch adds a new helper mptcp_userspace_pm_lookup_addr_by_id() to lookup the address entry with the given id on the userspace pm local address list. Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Reviewed-by: Mat Martineau <martineau@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: David S. Miller <davem@davemloft.net> Stable-dep-of: f642c5c4d528 ("mptcp: hold pm lock when deleting entry") Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- net/mptcp/pm_userspace.c | 31 ++++++++++++++++--------------- 1 file changed, 16 insertions(+), 15 deletions(-) --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -107,19 +107,26 @@ static int mptcp_userspace_pm_delete_loc return -EINVAL; } +static struct mptcp_pm_addr_entry * +mptcp_userspace_pm_lookup_addr_by_id(struct mptcp_sock *msk, unsigned int id) +{ + struct mptcp_pm_addr_entry *entry; + + list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { + if (entry->addr.id == id) + return entry; + } + return NULL; +} + int mptcp_userspace_pm_get_flags_and_ifindex_by_id(struct mptcp_sock *msk, unsigned int id, u8 *flags, int *ifindex) { - struct mptcp_pm_addr_entry *entry, *match = NULL; + struct mptcp_pm_addr_entry *match; spin_lock_bh(&msk->pm.lock); - list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { - if (id == entry->addr.id) { - match = entry; - break; - } - } + match = mptcp_userspace_pm_lookup_addr_by_id(msk, id); spin_unlock_bh(&msk->pm.lock); if (match) { *flags = match->flags; @@ -280,7 +287,7 @@ int mptcp_nl_cmd_remove(struct sk_buff * { struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN]; struct nlattr *id = info->attrs[MPTCP_PM_ATTR_LOC_ID]; - struct mptcp_pm_addr_entry *match = NULL; + struct mptcp_pm_addr_entry *match; struct mptcp_pm_addr_entry *entry; struct mptcp_sock *msk; LIST_HEAD(free_list); @@ -317,13 +324,7 @@ int mptcp_nl_cmd_remove(struct sk_buff * lock_sock(sk); - list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { - if (entry->addr.id == id_val) { - match = entry; - break; - } - } - + match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val); if (!match) { GENL_SET_ERR_MSG(info, "address with specified id not found"); release_sock(sk); Patches currently in stable-queue which might be from matttbe@kernel.org are queue-6.6/mptcp-pm-use-_rcu-variant-under-rcu_read_lock.patch queue-6.6/mptcp-error-out-earlier-on-disconnect.patch queue-6.6/mptcp-hold-pm-lock-when-deleting-entry.patch queue-6.6/mptcp-cope-racing-subflow-creation-in-mptcp_rcv_spac.patch queue-6.6/mptcp-drop-lookup_by_id-in-lookup_addr.patch queue-6.6/mptcp-add-userspace_pm_lookup_addr_by_id-helper.patch queue-6.6/mptcp-define-more-local-variables-sk.patch queue-6.6/mptcp-update-local-address-flags-when-setting-it.patch ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 6.6.y 3/6] mptcp: update local address flags when setting it @ 2024-11-19 12:31 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Matthieu Baerts (NGI0) @ 2024-11-18 18:27 UTC (permalink / raw) To: mptcp, stable, gregkh Cc: Geliang Tang, sashal, Matthieu Baerts, Jakub Kicinski From: Geliang Tang <tanggeliang@kylinos.cn> commit e0266319413d5d687ba7b6df7ca99e4b9724a4f2 upstream. Just like in-kernel pm, when userspace pm does set_flags, it needs to send out MP_PRIO signal, and also modify the flags of the corresponding address entry in the local address list. This patch implements the missing logic. Traverse all address entries on userspace_pm_local_addr_list to find the local address entry, if bkup is true, set the flags of this entry with FLAG_BACKUP, otherwise, clear FLAG_BACKUP. Fixes: 892f396c8e68 ("mptcp: netlink: issue MP_PRIO signals from userspace PMs") Cc: stable@vger.kernel.org Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20241112-net-mptcp-misc-6-12-pm-v1-1-b835580cefa8@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> [ Conflicts in pm_userspace.c, because commit 6a42477fe449 ("mptcp: update set_flags interfaces"), is not in this version, and causes too many conflicts when backporting it. The same code can still be added at the same place, before sending the ACK. ] Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_userspace.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index 23e362c11801..e268f61d8eb0 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -563,6 +563,7 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, struct mptcp_pm_addr_entry *loc, struct mptcp_pm_addr_entry *rem, u8 bkup) { + struct mptcp_pm_addr_entry *entry; struct mptcp_sock *msk; int ret = -EINVAL; struct sock *sk; @@ -583,6 +584,17 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, rem->addr.family == AF_UNSPEC) goto set_flags_err; + spin_lock_bh(&msk->pm.lock); + list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { + if (mptcp_addresses_equal(&entry->addr, &loc->addr, false)) { + if (bkup) + entry->flags |= MPTCP_PM_ADDR_FLAG_BACKUP; + else + entry->flags &= ~MPTCP_PM_ADDR_FLAG_BACKUP; + } + } + spin_unlock_bh(&msk->pm.lock); + lock_sock(sk); ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc->addr, &rem->addr, bkup); release_sock(sk); -- 2.45.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 6.6.y 3/6] mptcp: update local address flags when setting it @ 2024-11-19 12:31 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Sasha Levin @ 2024-11-19 12:31 UTC (permalink / raw) To: stable; +Cc: Matthieu Baerts (NGI0), Sasha Levin [ Sasha's backport helper bot ] Hi, The upstream commit SHA1 provided is correct: e0266319413d5d687ba7b6df7ca99e4b9724a4f2 WARNING: Author mismatch between patch and upstream commit: Backport author: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Commit author: Geliang Tang <tanggeliang@kylinos.cn> Commit in newer trees: |-----------------|----------------------------------------------| | 6.11.y | Present (different SHA1: a2062ee787b2) | | 6.6.y | Not found | |-----------------|----------------------------------------------| Note: The patch differs from the upstream commit: --- --- - 2024-11-19 01:08:21.112126559 -0500 +++ /tmp/tmp.JshXcaxs5Q 2024-11-19 01:08:21.107482370 -0500 @@ -1,3 +1,5 @@ +commit e0266319413d5d687ba7b6df7ca99e4b9724a4f2 upstream. + Just like in-kernel pm, when userspace pm does set_flags, it needs to send out MP_PRIO signal, and also modify the flags of the corresponding address entry in the local address list. This patch implements the missing logic. @@ -13,29 +15,34 @@ Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20241112-net-mptcp-misc-6-12-pm-v1-1-b835580cefa8@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> +[ Conflicts in pm_userspace.c, because commit 6a42477fe449 ("mptcp: + update set_flags interfaces"), is not in this version, and causes too + many conflicts when backporting it. The same code can still be added + at the same place, before sending the ACK. ] +Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_userspace.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c -index 56dfea9862b7b..3f888bfe1462e 100644 +index 23e362c11801..e268f61d8eb0 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c -@@ -560,6 +560,7 @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) - struct nlattr *token = info->attrs[MPTCP_PM_ATTR_TOKEN]; - struct nlattr *attr = info->attrs[MPTCP_PM_ATTR_ADDR]; - struct net *net = sock_net(skb->sk); +@@ -563,6 +563,7 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, + struct mptcp_pm_addr_entry *loc, + struct mptcp_pm_addr_entry *rem, u8 bkup) + { + struct mptcp_pm_addr_entry *entry; struct mptcp_sock *msk; int ret = -EINVAL; struct sock *sk; -@@ -601,6 +602,17 @@ int mptcp_userspace_pm_set_flags(struct sk_buff *skb, struct genl_info *info) - if (loc.flags & MPTCP_PM_ADDR_FLAG_BACKUP) - bkup = 1; +@@ -583,6 +584,17 @@ int mptcp_userspace_pm_set_flags(struct net *net, struct nlattr *token, + rem->addr.family == AF_UNSPEC) + goto set_flags_err; + spin_lock_bh(&msk->pm.lock); + list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { -+ if (mptcp_addresses_equal(&entry->addr, &loc.addr, false)) { ++ if (mptcp_addresses_equal(&entry->addr, &loc->addr, false)) { + if (bkup) + entry->flags |= MPTCP_PM_ADDR_FLAG_BACKUP; + else @@ -45,5 +52,8 @@ + spin_unlock_bh(&msk->pm.lock); + lock_sock(sk); - ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc.addr, &rem.addr, bkup); + ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc->addr, &rem->addr, bkup); release_sock(sk); +-- +2.45.2 + --- Results of testing on various branches: | Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-6.6.y | Success | Success | ^ permalink raw reply [flat|nested] 21+ messages in thread
* Patch "mptcp: update local address flags when setting it" has been added to the 6.6-stable tree 2024-11-19 12:31 ` Sasha Levin (?) @ 2024-11-19 13:02 ` gregkh -1 siblings, 0 replies; 21+ messages in thread From: gregkh @ 2024-11-19 13:02 UTC (permalink / raw) To: gregkh, kuba, matttbe, mptcp, sashal, tanggeliang; +Cc: stable-commits This is a note to let you know that I've just added the patch titled mptcp: update local address flags when setting it to the 6.6-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: mptcp-update-local-address-flags-when-setting-it.patch and it can be found in the queue-6.6 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@vger.kernel.org> know about it. From stable+bounces-93824-greg=kroah.com@vger.kernel.org Mon Nov 18 19:27:52 2024 From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Date: Mon, 18 Nov 2024 19:27:21 +0100 Subject: mptcp: update local address flags when setting it To: mptcp@lists.linux.dev, stable@vger.kernel.org, gregkh@linuxfoundation.org Cc: Geliang Tang <tanggeliang@kylinos.cn>, sashal@kernel.org, Matthieu Baerts <matttbe@kernel.org>, Jakub Kicinski <kuba@kernel.org> Message-ID: <20241118182718.3011097-11-matttbe@kernel.org> From: Geliang Tang <tanggeliang@kylinos.cn> commit e0266319413d5d687ba7b6df7ca99e4b9724a4f2 upstream. Just like in-kernel pm, when userspace pm does set_flags, it needs to send out MP_PRIO signal, and also modify the flags of the corresponding address entry in the local address list. This patch implements the missing logic. Traverse all address entries on userspace_pm_local_addr_list to find the local address entry, if bkup is true, set the flags of this entry with FLAG_BACKUP, otherwise, clear FLAG_BACKUP. Fixes: 892f396c8e68 ("mptcp: netlink: issue MP_PRIO signals from userspace PMs") Cc: stable@vger.kernel.org Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20241112-net-mptcp-misc-6-12-pm-v1-1-b835580cefa8@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> [ Conflicts in pm_userspace.c, because commit 6a42477fe449 ("mptcp: update set_flags interfaces"), is not in this version, and causes too many conflicts when backporting it. The same code can still be added at the same place, before sending the ACK. ] Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- net/mptcp/pm_userspace.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -563,6 +563,7 @@ int mptcp_userspace_pm_set_flags(struct struct mptcp_pm_addr_entry *loc, struct mptcp_pm_addr_entry *rem, u8 bkup) { + struct mptcp_pm_addr_entry *entry; struct mptcp_sock *msk; int ret = -EINVAL; struct sock *sk; @@ -583,6 +584,17 @@ int mptcp_userspace_pm_set_flags(struct rem->addr.family == AF_UNSPEC) goto set_flags_err; + spin_lock_bh(&msk->pm.lock); + list_for_each_entry(entry, &msk->pm.userspace_pm_local_addr_list, list) { + if (mptcp_addresses_equal(&entry->addr, &loc->addr, false)) { + if (bkup) + entry->flags |= MPTCP_PM_ADDR_FLAG_BACKUP; + else + entry->flags &= ~MPTCP_PM_ADDR_FLAG_BACKUP; + } + } + spin_unlock_bh(&msk->pm.lock); + lock_sock(sk); ret = mptcp_pm_nl_mp_prio_send_ack(msk, &loc->addr, &rem->addr, bkup); release_sock(sk); Patches currently in stable-queue which might be from matttbe@kernel.org are queue-6.6/mptcp-pm-use-_rcu-variant-under-rcu_read_lock.patch queue-6.6/mptcp-error-out-earlier-on-disconnect.patch queue-6.6/mptcp-hold-pm-lock-when-deleting-entry.patch queue-6.6/mptcp-cope-racing-subflow-creation-in-mptcp_rcv_spac.patch queue-6.6/mptcp-drop-lookup_by_id-in-lookup_addr.patch queue-6.6/mptcp-add-userspace_pm_lookup_addr_by_id-helper.patch queue-6.6/mptcp-define-more-local-variables-sk.patch queue-6.6/mptcp-update-local-address-flags-when-setting-it.patch ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 6.6.y 4/6] mptcp: hold pm lock when deleting entry @ 2024-11-19 12:30 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Matthieu Baerts (NGI0) @ 2024-11-18 18:27 UTC (permalink / raw) To: mptcp, stable, gregkh Cc: Geliang Tang, sashal, Matthieu Baerts, Jakub Kicinski From: Geliang Tang <tanggeliang@kylinos.cn> commit f642c5c4d528d11bd78b6c6f84f541cd3c0bea86 upstream. When traversing userspace_pm_local_addr_list and deleting an entry from it in mptcp_pm_nl_remove_doit(), msk->pm.lock should be held. This patch holds this lock before mptcp_userspace_pm_lookup_addr_by_id() and releases it after list_move() in mptcp_pm_nl_remove_doit(). Fixes: d9a4594edabf ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE") Cc: stable@vger.kernel.org Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20241112-net-mptcp-misc-6-12-pm-v1-2-b835580cefa8@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_userspace.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c index e268f61d8eb0..8faf776cb977 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -324,14 +324,17 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) lock_sock(sk); + spin_lock_bh(&msk->pm.lock); match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val); if (!match) { GENL_SET_ERR_MSG(info, "address with specified id not found"); + spin_unlock_bh(&msk->pm.lock); release_sock(sk); goto remove_err; } list_move(&match->list, &free_list); + spin_unlock_bh(&msk->pm.lock); mptcp_pm_remove_addrs(msk, &free_list); -- 2.45.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 6.6.y 4/6] mptcp: hold pm lock when deleting entry @ 2024-11-19 12:30 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Sasha Levin @ 2024-11-19 12:30 UTC (permalink / raw) To: stable; +Cc: Matthieu Baerts (NGI0), Sasha Levin [ Sasha's backport helper bot ] Hi, The upstream commit SHA1 provided is correct: f642c5c4d528d11bd78b6c6f84f541cd3c0bea86 WARNING: Author mismatch between patch and upstream commit: Backport author: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Commit author: Geliang Tang <tanggeliang@kylinos.cn> Commit in newer trees: |-----------------|----------------------------------------------| | 6.11.y | Present (different SHA1: ff6abb7bc44a) | | 6.6.y | Not found | |-----------------|----------------------------------------------| Note: The patch differs from the upstream commit: --- --- - 2024-11-19 01:13:28.589534977 -0500 +++ /tmp/tmp.4bH6oETSx7 2024-11-19 01:13:28.583100037 -0500 @@ -1,3 +1,5 @@ +commit f642c5c4d528d11bd78b6c6f84f541cd3c0bea86 upstream. + When traversing userspace_pm_local_addr_list and deleting an entry from it in mptcp_pm_nl_remove_doit(), msk->pm.lock should be held. @@ -11,15 +13,16 @@ Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20241112-net-mptcp-misc-6-12-pm-v1-2-b835580cefa8@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> +Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_userspace.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/mptcp/pm_userspace.c b/net/mptcp/pm_userspace.c -index 3f888bfe1462e..e35178f5205fa 100644 +index e268f61d8eb0..8faf776cb977 100644 --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c -@@ -308,14 +308,17 @@ int mptcp_pm_nl_remove_doit(struct sk_buff *skb, struct genl_info *info) +@@ -324,14 +324,17 @@ int mptcp_nl_cmd_remove(struct sk_buff *skb, struct genl_info *info) lock_sock(sk); @@ -29,7 +32,7 @@ GENL_SET_ERR_MSG(info, "address with specified id not found"); + spin_unlock_bh(&msk->pm.lock); release_sock(sk); - goto out; + goto remove_err; } list_move(&match->list, &free_list); @@ -37,3 +40,6 @@ mptcp_pm_remove_addrs(msk, &free_list); +-- +2.45.2 + --- Results of testing on various branches: | Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-6.6.y | Success | Success | ^ permalink raw reply [flat|nested] 21+ messages in thread
* Patch "mptcp: hold pm lock when deleting entry" has been added to the 6.6-stable tree 2024-11-19 12:30 ` Sasha Levin (?) @ 2024-11-19 13:02 ` gregkh -1 siblings, 0 replies; 21+ messages in thread From: gregkh @ 2024-11-19 13:02 UTC (permalink / raw) To: gregkh, kuba, matttbe, mptcp, sashal, tanggeliang; +Cc: stable-commits This is a note to let you know that I've just added the patch titled mptcp: hold pm lock when deleting entry to the 6.6-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: mptcp-hold-pm-lock-when-deleting-entry.patch and it can be found in the queue-6.6 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@vger.kernel.org> know about it. From stable+bounces-93825-greg=kroah.com@vger.kernel.org Mon Nov 18 19:27:56 2024 From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Date: Mon, 18 Nov 2024 19:27:22 +0100 Subject: mptcp: hold pm lock when deleting entry To: mptcp@lists.linux.dev, stable@vger.kernel.org, gregkh@linuxfoundation.org Cc: Geliang Tang <tanggeliang@kylinos.cn>, sashal@kernel.org, Matthieu Baerts <matttbe@kernel.org>, Jakub Kicinski <kuba@kernel.org> Message-ID: <20241118182718.3011097-12-matttbe@kernel.org> From: Geliang Tang <tanggeliang@kylinos.cn> commit f642c5c4d528d11bd78b6c6f84f541cd3c0bea86 upstream. When traversing userspace_pm_local_addr_list and deleting an entry from it in mptcp_pm_nl_remove_doit(), msk->pm.lock should be held. This patch holds this lock before mptcp_userspace_pm_lookup_addr_by_id() and releases it after list_move() in mptcp_pm_nl_remove_doit(). Fixes: d9a4594edabf ("mptcp: netlink: Add MPTCP_PM_CMD_REMOVE") Cc: stable@vger.kernel.org Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20241112-net-mptcp-misc-6-12-pm-v1-2-b835580cefa8@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- net/mptcp/pm_userspace.c | 3 +++ 1 file changed, 3 insertions(+) --- a/net/mptcp/pm_userspace.c +++ b/net/mptcp/pm_userspace.c @@ -324,14 +324,17 @@ int mptcp_nl_cmd_remove(struct sk_buff * lock_sock(sk); + spin_lock_bh(&msk->pm.lock); match = mptcp_userspace_pm_lookup_addr_by_id(msk, id_val); if (!match) { GENL_SET_ERR_MSG(info, "address with specified id not found"); + spin_unlock_bh(&msk->pm.lock); release_sock(sk); goto remove_err; } list_move(&match->list, &free_list); + spin_unlock_bh(&msk->pm.lock); mptcp_pm_remove_addrs(msk, &free_list); Patches currently in stable-queue which might be from matttbe@kernel.org are queue-6.6/mptcp-pm-use-_rcu-variant-under-rcu_read_lock.patch queue-6.6/mptcp-error-out-earlier-on-disconnect.patch queue-6.6/mptcp-hold-pm-lock-when-deleting-entry.patch queue-6.6/mptcp-cope-racing-subflow-creation-in-mptcp_rcv_spac.patch queue-6.6/mptcp-drop-lookup_by_id-in-lookup_addr.patch queue-6.6/mptcp-add-userspace_pm_lookup_addr_by_id-helper.patch queue-6.6/mptcp-define-more-local-variables-sk.patch queue-6.6/mptcp-update-local-address-flags-when-setting-it.patch ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 6.6.y 5/6] mptcp: drop lookup_by_id in lookup_addr @ 2024-11-19 12:31 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Matthieu Baerts (NGI0) @ 2024-11-18 18:27 UTC (permalink / raw) To: mptcp, stable, gregkh Cc: Geliang Tang, sashal, Matthieu Baerts, Jakub Kicinski From: Geliang Tang <tanggeliang@kylinos.cn> commit af250c27ea1c404e210fc3a308b20f772df584d6 upstream. When the lookup_by_id parameter of __lookup_addr() is true, it's the same as __lookup_addr_by_id(), it can be replaced by __lookup_addr_by_id() directly. So drop this parameter, let __lookup_addr() only looks up address on the local address list by comparing addresses in it, not address ids. Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://lore.kernel.org/r/20240305-upstream-net-next-20240304-mptcp-misc-cleanup-v1-4-c436ba5e569b@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Stable-dep-of: db3eab8110bc ("mptcp: pm: use _rcu variant under rcu_read_lock") [ Conflicts in pm_netlink.c, because commit 6a42477fe449 ("mptcp: update set_flags interfaces") is not in this version, and causes too many conflicts when backporting it. The conflict is easy to resolve: addr is a pointer here here in mptcp_pm_nl_set_flags(), the rest of the code is the same. ] Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_netlink.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index d8c47ca86de4..76be4f4412df 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -521,15 +521,12 @@ __lookup_addr_by_id(struct pm_nl_pernet *pernet, unsigned int id) } static struct mptcp_pm_addr_entry * -__lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info, - bool lookup_by_id) +__lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info) { struct mptcp_pm_addr_entry *entry; list_for_each_entry(entry, &pernet->local_addr_list, list) { - if ((!lookup_by_id && - mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) || - (lookup_by_id && entry->addr.id == info->id)) + if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) return entry; } return NULL; @@ -560,7 +557,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) mptcp_local_address((struct sock_common *)msk->first, &mpc_addr); rcu_read_lock(); - entry = __lookup_addr(pernet, &mpc_addr, false); + entry = __lookup_addr(pernet, &mpc_addr); if (entry) { __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); msk->mpc_endpoint_id = entry->addr.id; @@ -2064,7 +2061,8 @@ int mptcp_pm_nl_set_flags(struct net *net, struct mptcp_pm_addr_entry *addr, u8 } spin_lock_bh(&pernet->lock); - entry = __lookup_addr(pernet, &addr->addr, lookup_by_id); + entry = lookup_by_id ? __lookup_addr_by_id(pernet, addr->addr.id) : + __lookup_addr(pernet, &addr->addr); if (!entry) { spin_unlock_bh(&pernet->lock); return -EINVAL; -- 2.45.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 6.6.y 5/6] mptcp: drop lookup_by_id in lookup_addr @ 2024-11-19 12:31 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Sasha Levin @ 2024-11-19 12:31 UTC (permalink / raw) To: stable; +Cc: Matthieu Baerts (NGI0), Sasha Levin [ Sasha's backport helper bot ] Hi, The upstream commit SHA1 provided is correct: af250c27ea1c404e210fc3a308b20f772df584d6 WARNING: Author mismatch between patch and upstream commit: Backport author: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Commit author: Geliang Tang <tanggeliang@kylinos.cn> Commit in newer trees: |-----------------|----------------------------------------------| | 6.11.y | Present (exact SHA1) | | 6.6.y | Not found | |-----------------|----------------------------------------------| Note: The patch differs from the upstream commit: --- --- - 2024-11-19 01:18:40.472383026 -0500 +++ /tmp/tmp.zP9Ogi8y9E 2024-11-19 01:18:40.466656512 -0500 @@ -1,3 +1,5 @@ +commit af250c27ea1c404e210fc3a308b20f772df584d6 upstream. + When the lookup_by_id parameter of __lookup_addr() is true, it's the same as __lookup_addr_by_id(), it can be replaced by __lookup_addr_by_id() directly. So drop this parameter, let __lookup_addr() only looks up address @@ -8,15 +10,22 @@ Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://lore.kernel.org/r/20240305-upstream-net-next-20240304-mptcp-misc-cleanup-v1-4-c436ba5e569b@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> +Stable-dep-of: db3eab8110bc ("mptcp: pm: use _rcu variant under rcu_read_lock") +[ Conflicts in pm_netlink.c, because commit 6a42477fe449 ("mptcp: update + set_flags interfaces") is not in this version, and causes too many + conflicts when backporting it. The conflict is easy to resolve: addr + is a pointer here here in mptcp_pm_nl_set_flags(), the rest of the + code is the same. ] +Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_netlink.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c -index 354083b8386f0..5c17d39146ea2 100644 +index d8c47ca86de4..76be4f4412df 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c -@@ -499,15 +499,12 @@ __lookup_addr_by_id(struct pm_nl_pernet *pernet, unsigned int id) +@@ -521,15 +521,12 @@ __lookup_addr_by_id(struct pm_nl_pernet *pernet, unsigned int id) } static struct mptcp_pm_addr_entry * @@ -34,7 +43,7 @@ return entry; } return NULL; -@@ -537,7 +534,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) +@@ -560,7 +557,7 @@ static void mptcp_pm_create_subflow_or_signal_addr(struct mptcp_sock *msk) mptcp_local_address((struct sock_common *)msk->first, &mpc_addr); rcu_read_lock(); @@ -43,13 +52,16 @@ if (entry) { __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); msk->mpc_endpoint_id = entry->addr.id; -@@ -1918,7 +1915,8 @@ int mptcp_pm_nl_set_flags(struct sk_buff *skb, struct genl_info *info) - bkup = 1; +@@ -2064,7 +2061,8 @@ int mptcp_pm_nl_set_flags(struct net *net, struct mptcp_pm_addr_entry *addr, u8 + } spin_lock_bh(&pernet->lock); -- entry = __lookup_addr(pernet, &addr.addr, lookup_by_id); -+ entry = lookup_by_id ? __lookup_addr_by_id(pernet, addr.addr.id) : -+ __lookup_addr(pernet, &addr.addr); +- entry = __lookup_addr(pernet, &addr->addr, lookup_by_id); ++ entry = lookup_by_id ? __lookup_addr_by_id(pernet, addr->addr.id) : ++ __lookup_addr(pernet, &addr->addr); if (!entry) { spin_unlock_bh(&pernet->lock); - GENL_SET_ERR_MSG(info, "address not found"); + return -EINVAL; +-- +2.45.2 + --- Results of testing on various branches: | Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-6.6.y | Success | Success | ^ permalink raw reply [flat|nested] 21+ messages in thread
* Patch "mptcp: drop lookup_by_id in lookup_addr" has been added to the 6.6-stable tree 2024-11-19 12:31 ` Sasha Levin (?) @ 2024-11-19 13:02 ` gregkh -1 siblings, 0 replies; 21+ messages in thread From: gregkh @ 2024-11-19 13:02 UTC (permalink / raw) To: gregkh, kuba, matttbe, mptcp, sashal, tanggeliang; +Cc: stable-commits This is a note to let you know that I've just added the patch titled mptcp: drop lookup_by_id in lookup_addr to the 6.6-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: mptcp-drop-lookup_by_id-in-lookup_addr.patch and it can be found in the queue-6.6 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@vger.kernel.org> know about it. From stable+bounces-93826-greg=kroah.com@vger.kernel.org Mon Nov 18 19:27:58 2024 From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Date: Mon, 18 Nov 2024 19:27:23 +0100 Subject: mptcp: drop lookup_by_id in lookup_addr To: mptcp@lists.linux.dev, stable@vger.kernel.org, gregkh@linuxfoundation.org Cc: Geliang Tang <tanggeliang@kylinos.cn>, sashal@kernel.org, Matthieu Baerts <matttbe@kernel.org>, Jakub Kicinski <kuba@kernel.org> Message-ID: <20241118182718.3011097-13-matttbe@kernel.org> From: Geliang Tang <tanggeliang@kylinos.cn> commit af250c27ea1c404e210fc3a308b20f772df584d6 upstream. When the lookup_by_id parameter of __lookup_addr() is true, it's the same as __lookup_addr_by_id(), it can be replaced by __lookup_addr_by_id() directly. So drop this parameter, let __lookup_addr() only looks up address on the local address list by comparing addresses in it, not address ids. Signed-off-by: Geliang Tang <tanggeliang@kylinos.cn> Reviewed-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://lore.kernel.org/r/20240305-upstream-net-next-20240304-mptcp-misc-cleanup-v1-4-c436ba5e569b@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Stable-dep-of: db3eab8110bc ("mptcp: pm: use _rcu variant under rcu_read_lock") [ Conflicts in pm_netlink.c, because commit 6a42477fe449 ("mptcp: update set_flags interfaces") is not in this version, and causes too many conflicts when backporting it. The conflict is easy to resolve: addr is a pointer here here in mptcp_pm_nl_set_flags(), the rest of the code is the same. ] Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- net/mptcp/pm_netlink.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -521,15 +521,12 @@ __lookup_addr_by_id(struct pm_nl_pernet } static struct mptcp_pm_addr_entry * -__lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info, - bool lookup_by_id) +__lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info) { struct mptcp_pm_addr_entry *entry; list_for_each_entry(entry, &pernet->local_addr_list, list) { - if ((!lookup_by_id && - mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) || - (lookup_by_id && entry->addr.id == info->id)) + if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) return entry; } return NULL; @@ -560,7 +557,7 @@ static void mptcp_pm_create_subflow_or_s mptcp_local_address((struct sock_common *)msk->first, &mpc_addr); rcu_read_lock(); - entry = __lookup_addr(pernet, &mpc_addr, false); + entry = __lookup_addr(pernet, &mpc_addr); if (entry) { __clear_bit(entry->addr.id, msk->pm.id_avail_bitmap); msk->mpc_endpoint_id = entry->addr.id; @@ -2064,7 +2061,8 @@ int mptcp_pm_nl_set_flags(struct net *ne } spin_lock_bh(&pernet->lock); - entry = __lookup_addr(pernet, &addr->addr, lookup_by_id); + entry = lookup_by_id ? __lookup_addr_by_id(pernet, addr->addr.id) : + __lookup_addr(pernet, &addr->addr); if (!entry) { spin_unlock_bh(&pernet->lock); return -EINVAL; Patches currently in stable-queue which might be from matttbe@kernel.org are queue-6.6/mptcp-pm-use-_rcu-variant-under-rcu_read_lock.patch queue-6.6/mptcp-error-out-earlier-on-disconnect.patch queue-6.6/mptcp-hold-pm-lock-when-deleting-entry.patch queue-6.6/mptcp-cope-racing-subflow-creation-in-mptcp_rcv_spac.patch queue-6.6/mptcp-drop-lookup_by_id-in-lookup_addr.patch queue-6.6/mptcp-add-userspace_pm_lookup_addr_by_id-helper.patch queue-6.6/mptcp-define-more-local-variables-sk.patch queue-6.6/mptcp-update-local-address-flags-when-setting-it.patch ^ permalink raw reply [flat|nested] 21+ messages in thread
* [PATCH 6.6.y 6/6] mptcp: pm: use _rcu variant under rcu_read_lock @ 2024-11-19 12:30 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Matthieu Baerts (NGI0) @ 2024-11-18 18:27 UTC (permalink / raw) To: mptcp, stable, gregkh Cc: Matthieu Baerts (NGI0), sashal, Geliang Tang, Jakub Kicinski commit db3eab8110bc0520416101b6a5b52f44a43fb4cf upstream. In mptcp_pm_create_subflow_or_signal_addr(), rcu_read_(un)lock() are used as expected to iterate over the list of local addresses, but list_for_each_entry() was used instead of list_for_each_entry_rcu() in __lookup_addr(). It is important to use this variant which adds the required READ_ONCE() (and diagnostic checks if enabled). Because __lookup_addr() is also used in mptcp_pm_nl_set_flags() where it is called under the pernet->lock and not rcu_read_lock(), an extra condition is then passed to help the diagnostic checks making sure either the associated spin lock or the RCU lock is held. Fixes: 86e39e04482b ("mptcp: keep track of local endpoint still available for each msk") Cc: stable@vger.kernel.org Reviewed-by: Geliang Tang <geliang@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20241112-net-mptcp-misc-6-12-pm-v1-3-b835580cefa8@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_netlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c index 76be4f4412df..2cf4393e48dc 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -525,7 +525,8 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info) { struct mptcp_pm_addr_entry *entry; - list_for_each_entry(entry, &pernet->local_addr_list, list) { + list_for_each_entry_rcu(entry, &pernet->local_addr_list, list, + lockdep_is_held(&pernet->lock)) { if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) return entry; } -- 2.45.2 ^ permalink raw reply related [flat|nested] 21+ messages in thread
* Re: [PATCH 6.6.y 6/6] mptcp: pm: use _rcu variant under rcu_read_lock @ 2024-11-19 12:30 ` Sasha Levin 0 siblings, 0 replies; 21+ messages in thread From: Sasha Levin @ 2024-11-19 12:30 UTC (permalink / raw) To: stable; +Cc: Matthieu Baerts (NGI0), Sasha Levin [ Sasha's backport helper bot ] Hi, The upstream commit SHA1 provided is correct: db3eab8110bc0520416101b6a5b52f44a43fb4cf WARNING: Author mismatch between patch and upstream commit: Backport author: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Commit author: Matthieu Baerts (NGI0) <matttbe@kernel.org> Commit in newer trees: |-----------------|----------------------------------------------| | 6.11.y | Present (different SHA1: b5e96b7d3dea) | | 6.6.y | Not found | |-----------------|----------------------------------------------| Note: The patch differs from the upstream commit: --- --- - 2024-11-19 01:23:44.789483772 -0500 +++ /tmp/tmp.5L1iL6LFxQ 2024-11-19 01:23:44.782305743 -0500 @@ -15,15 +15,16 @@ Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20241112-net-mptcp-misc-6-12-pm-v1-3-b835580cefa8@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> +Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> --- net/mptcp/pm_netlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/net/mptcp/pm_netlink.c b/net/mptcp/pm_netlink.c -index db586a5b3866f..45a2b5f05d38b 100644 +index 76be4f4412df..2cf4393e48dc 100644 --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c -@@ -524,7 +524,8 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info) +@@ -525,7 +525,8 @@ __lookup_addr(struct pm_nl_pernet *pernet, const struct mptcp_addr_info *info) { struct mptcp_pm_addr_entry *entry; @@ -33,3 +34,6 @@ if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) return entry; } +-- +2.45.2 + --- Results of testing on various branches: | Branch | Patch Apply | Build Test | |---------------------------|-------------|------------| | stable/linux-6.6.y | Success | Success | ^ permalink raw reply [flat|nested] 21+ messages in thread
* Patch "mptcp: pm: use _rcu variant under rcu_read_lock" has been added to the 6.6-stable tree 2024-11-19 12:30 ` Sasha Levin (?) @ 2024-11-19 13:02 ` gregkh -1 siblings, 0 replies; 21+ messages in thread From: gregkh @ 2024-11-19 13:02 UTC (permalink / raw) To: geliang, gregkh, kuba, matttbe, mptcp, sashal; +Cc: stable-commits This is a note to let you know that I've just added the patch titled mptcp: pm: use _rcu variant under rcu_read_lock to the 6.6-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: mptcp-pm-use-_rcu-variant-under-rcu_read_lock.patch and it can be found in the queue-6.6 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <stable@vger.kernel.org> know about it. From stable+bounces-93827-greg=kroah.com@vger.kernel.org Mon Nov 18 19:28:00 2024 From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> Date: Mon, 18 Nov 2024 19:27:24 +0100 Subject: mptcp: pm: use _rcu variant under rcu_read_lock To: mptcp@lists.linux.dev, stable@vger.kernel.org, gregkh@linuxfoundation.org Cc: "Matthieu Baerts (NGI0)" <matttbe@kernel.org>, sashal@kernel.org, Geliang Tang <geliang@kernel.org>, Jakub Kicinski <kuba@kernel.org> Message-ID: <20241118182718.3011097-14-matttbe@kernel.org> From: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> commit db3eab8110bc0520416101b6a5b52f44a43fb4cf upstream. In mptcp_pm_create_subflow_or_signal_addr(), rcu_read_(un)lock() are used as expected to iterate over the list of local addresses, but list_for_each_entry() was used instead of list_for_each_entry_rcu() in __lookup_addr(). It is important to use this variant which adds the required READ_ONCE() (and diagnostic checks if enabled). Because __lookup_addr() is also used in mptcp_pm_nl_set_flags() where it is called under the pernet->lock and not rcu_read_lock(), an extra condition is then passed to help the diagnostic checks making sure either the associated spin lock or the RCU lock is held. Fixes: 86e39e04482b ("mptcp: keep track of local endpoint still available for each msk") Cc: stable@vger.kernel.org Reviewed-by: Geliang Tang <geliang@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Link: https://patch.msgid.link/20241112-net-mptcp-misc-6-12-pm-v1-3-b835580cefa8@kernel.org Signed-off-by: Jakub Kicinski <kuba@kernel.org> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> --- net/mptcp/pm_netlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) --- a/net/mptcp/pm_netlink.c +++ b/net/mptcp/pm_netlink.c @@ -525,7 +525,8 @@ __lookup_addr(struct pm_nl_pernet *perne { struct mptcp_pm_addr_entry *entry; - list_for_each_entry(entry, &pernet->local_addr_list, list) { + list_for_each_entry_rcu(entry, &pernet->local_addr_list, list, + lockdep_is_held(&pernet->lock)) { if (mptcp_addresses_equal(&entry->addr, info, entry->addr.port)) return entry; } Patches currently in stable-queue which might be from matttbe@kernel.org are queue-6.6/mptcp-pm-use-_rcu-variant-under-rcu_read_lock.patch queue-6.6/mptcp-error-out-earlier-on-disconnect.patch queue-6.6/mptcp-hold-pm-lock-when-deleting-entry.patch queue-6.6/mptcp-cope-racing-subflow-creation-in-mptcp_rcv_spac.patch queue-6.6/mptcp-drop-lookup_by_id-in-lookup_addr.patch queue-6.6/mptcp-add-userspace_pm_lookup_addr_by_id-helper.patch queue-6.6/mptcp-define-more-local-variables-sk.patch queue-6.6/mptcp-update-local-address-flags-when-setting-it.patch ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6.6.y 6/6] mptcp: pm: use _rcu variant under rcu_read_lock 2024-11-19 12:30 ` Sasha Levin (?) (?) @ 2024-11-19 15:34 ` Matthieu Baerts -1 siblings, 0 replies; 21+ messages in thread From: Matthieu Baerts @ 2024-11-19 15:34 UTC (permalink / raw) To: Sasha Levin, stable Hi Sasha, On 19/11/2024 13:30, Sasha Levin wrote: > [ Sasha's backport helper bot ] It looks like a nice helper bot for you and Greg! > > Hi, > > The upstream commit SHA1 provided is correct: db3eab8110bc0520416101b6a5b52f44a43fb4cf > > WARNING: Author mismatch between patch and upstream commit: > Backport author: "Matthieu Baerts (NGI0)" <matttbe@kernel.org> > Commit author: Matthieu Baerts (NGI0) <matttbe@kernel.org> A small detail: it looks like your script doesn't properly handle my username containing "(NGI0)": one side has double quotes, not the other one, hence the warning. Cheers, Matt -- Sponsored by the NGI0 Core fund. ^ permalink raw reply [flat|nested] 21+ messages in thread
* Re: [PATCH 6.6.y 0/6] mptcp: fix recent failed backports 2024-11-18 18:27 [PATCH 6.6.y 0/6] mptcp: fix recent failed backports Matthieu Baerts (NGI0) ` (5 preceding siblings ...) 2024-11-19 12:30 ` Sasha Levin @ 2024-11-19 13:02 ` Greg KH 6 siblings, 0 replies; 21+ messages in thread From: Greg KH @ 2024-11-19 13:02 UTC (permalink / raw) To: Matthieu Baerts (NGI0); +Cc: mptcp, stable, sashal On Mon, Nov 18, 2024 at 07:27:18PM +0100, Matthieu Baerts (NGI0) wrote: > Greg recently reported 3 patches that could not be applied without > conflict in v6.6: > > - e0266319413d ("mptcp: update local address flags when setting it") > - f642c5c4d528 ("mptcp: hold pm lock when deleting entry") > - db3eab8110bc ("mptcp: pm: use _rcu variant under rcu_read_lock") > > Conflicts, if any, have been resolved, and documented in each patch. > > Note that there are 3 extra patches added to avoid some conflicts: > > - 14cb0e0bf39b ("mptcp: define more local variables sk") > - 06afe09091ee ("mptcp: add userspace_pm_lookup_addr_by_id helper") > - af250c27ea1c ("mptcp: drop lookup_by_id in lookup_addr") > > The Stable-dep-of tags have been added to these patches. Now queued up, thanks! greg k-h ^ permalink raw reply [flat|nested] 21+ messages in thread
end of thread, other threads:[~2024-11-19 15:34 UTC | newest] Thread overview: 21+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-11-18 18:27 [PATCH 6.6.y 0/6] mptcp: fix recent failed backports Matthieu Baerts (NGI0) 2024-11-18 18:27 ` [PATCH 6.6.y 1/6] mptcp: define more local variables sk Matthieu Baerts (NGI0) 2024-11-19 12:31 ` Sasha Levin 2024-11-19 13:02 ` Patch "mptcp: define more local variables sk" has been added to the 6.6-stable tree gregkh 2024-11-18 18:27 ` [PATCH 6.6.y 2/6] mptcp: add userspace_pm_lookup_addr_by_id helper Matthieu Baerts (NGI0) 2024-11-19 12:31 ` Sasha Levin 2024-11-19 13:02 ` Patch "mptcp: add userspace_pm_lookup_addr_by_id helper" has been added to the 6.6-stable tree gregkh 2024-11-18 18:27 ` [PATCH 6.6.y 3/6] mptcp: update local address flags when setting it Matthieu Baerts (NGI0) 2024-11-19 12:31 ` Sasha Levin 2024-11-19 13:02 ` Patch "mptcp: update local address flags when setting it" has been added to the 6.6-stable tree gregkh 2024-11-18 18:27 ` [PATCH 6.6.y 4/6] mptcp: hold pm lock when deleting entry Matthieu Baerts (NGI0) 2024-11-19 12:30 ` Sasha Levin 2024-11-19 13:02 ` Patch "mptcp: hold pm lock when deleting entry" has been added to the 6.6-stable tree gregkh 2024-11-18 18:27 ` [PATCH 6.6.y 5/6] mptcp: drop lookup_by_id in lookup_addr Matthieu Baerts (NGI0) 2024-11-19 12:31 ` Sasha Levin 2024-11-19 13:02 ` Patch "mptcp: drop lookup_by_id in lookup_addr" has been added to the 6.6-stable tree gregkh 2024-11-18 18:27 ` [PATCH 6.6.y 6/6] mptcp: pm: use _rcu variant under rcu_read_lock Matthieu Baerts (NGI0) 2024-11-19 12:30 ` Sasha Levin 2024-11-19 13:02 ` Patch "mptcp: pm: use _rcu variant under rcu_read_lock" has been added to the 6.6-stable tree gregkh 2024-11-19 15:34 ` [PATCH 6.6.y 6/6] mptcp: pm: use _rcu variant under rcu_read_lock Matthieu Baerts 2024-11-19 13:02 ` [PATCH 6.6.y 0/6] mptcp: fix recent failed backports Greg KH
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.