* [PATCH net 0/3] mptcp: sched: fix some lock issues
@ 2024-10-21 10:25 Matthieu Baerts (NGI0)
2024-10-21 10:25 ` [PATCH net 1/3] mptcp: init: protect sched with rcu_read_lock Matthieu Baerts (NGI0)
` (2 more replies)
0 siblings, 3 replies; 9+ messages in thread
From: Matthieu Baerts (NGI0) @ 2024-10-21 10:25 UTC (permalink / raw)
To: mptcp, Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Gregory Detal,
Shuah Khan
Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts (NGI0),
stable
Two small fixes related to the MPTCP packets scheduler:
- Patch 1: add missing rcu_read_(un)lock(). A fix for >= 6.6.
- Patch 2: remove unneeded lock when listing packets schedulers. A fix
for >= 6.10.
And some modifications in the MPTCP selftests:
- Patch 3: a small addition to the MPTCP selftests to cover more code.
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
Matthieu Baerts (NGI0) (3):
mptcp: init: protect sched with rcu_read_lock
mptcp: remove unneeded lock when listing scheds
selftests: mptcp: list sysctl data
net/mptcp/protocol.c | 2 ++
net/mptcp/sched.c | 2 --
tools/testing/selftests/net/mptcp/mptcp_connect.sh | 9 +++++++++
3 files changed, 11 insertions(+), 2 deletions(-)
---
base-commit: 3b05b9c36ddd01338e1352588f2ec1ea23f97d43
change-id: 20241021-net-mptcp-sched-lock-10dfc75d1e00
Best regards,
--
Matthieu Baerts (NGI0) <matttbe@kernel.org>
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH net 1/3] mptcp: init: protect sched with rcu_read_lock
2024-10-21 10:25 [PATCH net 0/3] mptcp: sched: fix some lock issues Matthieu Baerts (NGI0)
@ 2024-10-21 10:25 ` Matthieu Baerts (NGI0)
2024-10-23 12:19 ` Simon Horman
2024-10-21 10:25 ` [PATCH net 2/3] mptcp: remove unneeded lock when listing scheds Matthieu Baerts (NGI0)
2024-10-28 23:00 ` [PATCH net 0/3] mptcp: sched: fix some lock issues patchwork-bot+netdevbpf
2 siblings, 1 reply; 9+ messages in thread
From: Matthieu Baerts (NGI0) @ 2024-10-21 10:25 UTC (permalink / raw)
To: mptcp, Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Gregory Detal,
Shuah Khan
Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts (NGI0),
stable
Enabling CONFIG_PROVE_RCU_LIST with its dependence CONFIG_RCU_EXPERT
creates this splat when an MPTCP socket is created:
=============================
WARNING: suspicious RCU usage
6.12.0-rc2+ #11 Not tainted
-----------------------------
net/mptcp/sched.c:44 RCU-list traversed in non-reader section!!
other info that might help us debug this:
rcu_scheduler_active = 2, debug_locks = 1
no locks held by mptcp_connect/176.
stack backtrace:
CPU: 0 UID: 0 PID: 176 Comm: mptcp_connect Not tainted 6.12.0-rc2+ #11
Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
Call Trace:
<TASK>
dump_stack_lvl (lib/dump_stack.c:123)
lockdep_rcu_suspicious (kernel/locking/lockdep.c:6822)
mptcp_sched_find (net/mptcp/sched.c:44 (discriminator 7))
mptcp_init_sock (net/mptcp/protocol.c:2867 (discriminator 1))
? sock_init_data_uid (arch/x86/include/asm/atomic.h:28)
inet_create.part.0.constprop.0 (net/ipv4/af_inet.c:386)
? __sock_create (include/linux/rcupdate.h:347 (discriminator 1))
__sock_create (net/socket.c:1576)
__sys_socket (net/socket.c:1671)
? __pfx___sys_socket (net/socket.c:1712)
? do_user_addr_fault (arch/x86/mm/fault.c:1419 (discriminator 1))
__x64_sys_socket (net/socket.c:1728)
do_syscall_64 (arch/x86/entry/common.c:52 (discriminator 1))
entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
That's because when the socket is initialised, rcu_read_lock() is not
used despite the explicit comment written above the declaration of
mptcp_sched_find() in sched.c. Adding the missing lock/unlock avoids the
warning.
Fixes: 1730b2b2c5a5 ("mptcp: add sched in mptcp_sock")
Cc: stable@vger.kernel.org
Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/523
Reviewed-by: Geliang Tang <geliang@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
net/mptcp/protocol.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/net/mptcp/protocol.c b/net/mptcp/protocol.c
index 6d0e201c3eb26aa6ca0ff27e5a65cb6f911012f2..d263091659e076587bc3406dfdcb4409adb3247e 100644
--- a/net/mptcp/protocol.c
+++ b/net/mptcp/protocol.c
@@ -2864,8 +2864,10 @@ static int mptcp_init_sock(struct sock *sk)
if (unlikely(!net->mib.mptcp_statistics) && !mptcp_mib_alloc(net))
return -ENOMEM;
+ rcu_read_lock();
ret = mptcp_init_sched(mptcp_sk(sk),
mptcp_sched_find(mptcp_get_scheduler(net)));
+ rcu_read_unlock();
if (ret)
return ret;
--
2.45.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCH net 2/3] mptcp: remove unneeded lock when listing scheds
2024-10-21 10:25 [PATCH net 0/3] mptcp: sched: fix some lock issues Matthieu Baerts (NGI0)
2024-10-21 10:25 ` [PATCH net 1/3] mptcp: init: protect sched with rcu_read_lock Matthieu Baerts (NGI0)
@ 2024-10-21 10:25 ` Matthieu Baerts (NGI0)
2024-10-23 12:21 ` Simon Horman
2024-10-28 23:00 ` [PATCH net 0/3] mptcp: sched: fix some lock issues patchwork-bot+netdevbpf
2 siblings, 1 reply; 9+ messages in thread
From: Matthieu Baerts (NGI0) @ 2024-10-21 10:25 UTC (permalink / raw)
To: mptcp, Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Simon Horman, Gregory Detal,
Shuah Khan
Cc: netdev, linux-kernel, linux-kselftest, Matthieu Baerts (NGI0),
stable
mptcp_get_available_schedulers() needs to iterate over the schedulers'
list only to read the names: it doesn't modify anything there.
In this case, it is enough to hold the RCU read lock, no need to combine
this with the associated spin lock.
Fixes: 73c900aa3660 ("mptcp: add net.mptcp.available_schedulers")
Cc: stable@vger.kernel.org
Suggested-by: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Geliang Tang <geliang@kernel.org>
Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
---
net/mptcp/sched.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/net/mptcp/sched.c b/net/mptcp/sched.c
index 78ed508ebc1b8dd9f0e020cca1bdd86f24f0afeb..df7dbcfa3b71370cc4d7e4e4f16cc1e41a50dddf 100644
--- a/net/mptcp/sched.c
+++ b/net/mptcp/sched.c
@@ -60,7 +60,6 @@ void mptcp_get_available_schedulers(char *buf, size_t maxlen)
size_t offs = 0;
rcu_read_lock();
- spin_lock(&mptcp_sched_list_lock);
list_for_each_entry_rcu(sched, &mptcp_sched_list, list) {
offs += snprintf(buf + offs, maxlen - offs,
"%s%s",
@@ -69,7 +68,6 @@ void mptcp_get_available_schedulers(char *buf, size_t maxlen)
if (WARN_ON_ONCE(offs >= maxlen))
break;
}
- spin_unlock(&mptcp_sched_list_lock);
rcu_read_unlock();
}
--
2.45.2
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH net 1/3] mptcp: init: protect sched with rcu_read_lock
2024-10-21 10:25 ` [PATCH net 1/3] mptcp: init: protect sched with rcu_read_lock Matthieu Baerts (NGI0)
@ 2024-10-23 12:19 ` Simon Horman
0 siblings, 0 replies; 9+ messages in thread
From: Simon Horman @ 2024-10-23 12:19 UTC (permalink / raw)
To: Matthieu Baerts (NGI0)
Cc: mptcp, Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Gregory Detal, Shuah Khan, netdev,
linux-kernel, linux-kselftest, stable
On Mon, Oct 21, 2024 at 12:25:26PM +0200, Matthieu Baerts (NGI0) wrote:
> Enabling CONFIG_PROVE_RCU_LIST with its dependence CONFIG_RCU_EXPERT
> creates this splat when an MPTCP socket is created:
>
> =============================
> WARNING: suspicious RCU usage
> 6.12.0-rc2+ #11 Not tainted
> -----------------------------
> net/mptcp/sched.c:44 RCU-list traversed in non-reader section!!
>
> other info that might help us debug this:
>
> rcu_scheduler_active = 2, debug_locks = 1
> no locks held by mptcp_connect/176.
>
> stack backtrace:
> CPU: 0 UID: 0 PID: 176 Comm: mptcp_connect Not tainted 6.12.0-rc2+ #11
> Hardware name: Bochs Bochs, BIOS Bochs 01/01/2011
> Call Trace:
> <TASK>
> dump_stack_lvl (lib/dump_stack.c:123)
> lockdep_rcu_suspicious (kernel/locking/lockdep.c:6822)
> mptcp_sched_find (net/mptcp/sched.c:44 (discriminator 7))
> mptcp_init_sock (net/mptcp/protocol.c:2867 (discriminator 1))
> ? sock_init_data_uid (arch/x86/include/asm/atomic.h:28)
> inet_create.part.0.constprop.0 (net/ipv4/af_inet.c:386)
> ? __sock_create (include/linux/rcupdate.h:347 (discriminator 1))
> __sock_create (net/socket.c:1576)
> __sys_socket (net/socket.c:1671)
> ? __pfx___sys_socket (net/socket.c:1712)
> ? do_user_addr_fault (arch/x86/mm/fault.c:1419 (discriminator 1))
> __x64_sys_socket (net/socket.c:1728)
> do_syscall_64 (arch/x86/entry/common.c:52 (discriminator 1))
> entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:130)
>
> That's because when the socket is initialised, rcu_read_lock() is not
> used despite the explicit comment written above the declaration of
> mptcp_sched_find() in sched.c. Adding the missing lock/unlock avoids the
> warning.
>
> Fixes: 1730b2b2c5a5 ("mptcp: add sched in mptcp_sock")
> Cc: stable@vger.kernel.org
> Closes: https://github.com/multipath-tcp/mptcp_net-next/issues/523
> Reviewed-by: Geliang Tang <geliang@kernel.org>
> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net 2/3] mptcp: remove unneeded lock when listing scheds
2024-10-21 10:25 ` [PATCH net 2/3] mptcp: remove unneeded lock when listing scheds Matthieu Baerts (NGI0)
@ 2024-10-23 12:21 ` Simon Horman
2024-10-23 14:13 ` Matthieu Baerts
0 siblings, 1 reply; 9+ messages in thread
From: Simon Horman @ 2024-10-23 12:21 UTC (permalink / raw)
To: Matthieu Baerts (NGI0)
Cc: mptcp, Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Gregory Detal, Shuah Khan, netdev,
linux-kernel, linux-kselftest, stable
On Mon, Oct 21, 2024 at 12:25:27PM +0200, Matthieu Baerts (NGI0) wrote:
> mptcp_get_available_schedulers() needs to iterate over the schedulers'
> list only to read the names: it doesn't modify anything there.
>
> In this case, it is enough to hold the RCU read lock, no need to combine
> this with the associated spin lock.
>
> Fixes: 73c900aa3660 ("mptcp: add net.mptcp.available_schedulers")
> Cc: stable@vger.kernel.org
> Suggested-by: Paolo Abeni <pabeni@redhat.com>
> Reviewed-by: Geliang Tang <geliang@kernel.org>
> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
I do wonder if it would be more appropriate to route this via net-next
(without a fixes tag) rather than via net. But either way this looks good
to me.
Reviewed-by: Simon Horman <horms@kernel.org>
...
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net 2/3] mptcp: remove unneeded lock when listing scheds
2024-10-23 12:21 ` Simon Horman
@ 2024-10-23 14:13 ` Matthieu Baerts
2024-10-25 10:00 ` Simon Horman
2024-10-28 22:53 ` Jakub Kicinski
0 siblings, 2 replies; 9+ messages in thread
From: Matthieu Baerts @ 2024-10-23 14:13 UTC (permalink / raw)
To: Simon Horman
Cc: mptcp, Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Gregory Detal, Shuah Khan, netdev,
linux-kernel, linux-kselftest, stable
Hi Simon,
Thank you for the reviews!
On 23/10/2024 14:21, Simon Horman wrote:
> On Mon, Oct 21, 2024 at 12:25:27PM +0200, Matthieu Baerts (NGI0) wrote:
>> mptcp_get_available_schedulers() needs to iterate over the schedulers'
>> list only to read the names: it doesn't modify anything there.
>>
>> In this case, it is enough to hold the RCU read lock, no need to combine
>> this with the associated spin lock.
>>
>> Fixes: 73c900aa3660 ("mptcp: add net.mptcp.available_schedulers")
>> Cc: stable@vger.kernel.org
>> Suggested-by: Paolo Abeni <pabeni@redhat.com>
>> Reviewed-by: Geliang Tang <geliang@kernel.org>
>> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
>
> I do wonder if it would be more appropriate to route this via net-next
> (without a fixes tag) rather than via net. But either way this looks good
> to me.
Good point. On one hand, I marked it as a fix, because when working on
the patch 1/3, we noticed these spin_(un)lock() were not supposed to be
there in the first place. On the other hand, even it's fixing a small
performance issue, it is not fixing a regression.
I think it is easier to route this via -net, but I'm fine if it is
applied in net-next.
Cheers,
Matt
--
Sponsored by the NGI0 Core fund.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net 2/3] mptcp: remove unneeded lock when listing scheds
2024-10-23 14:13 ` Matthieu Baerts
@ 2024-10-25 10:00 ` Simon Horman
2024-10-28 22:53 ` Jakub Kicinski
1 sibling, 0 replies; 9+ messages in thread
From: Simon Horman @ 2024-10-25 10:00 UTC (permalink / raw)
To: Matthieu Baerts
Cc: mptcp, Mat Martineau, Geliang Tang, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, Gregory Detal, Shuah Khan, netdev,
linux-kernel, linux-kselftest, stable
On Wed, Oct 23, 2024 at 04:13:36PM +0200, Matthieu Baerts wrote:
> Hi Simon,
>
> Thank you for the reviews!
>
> On 23/10/2024 14:21, Simon Horman wrote:
> > On Mon, Oct 21, 2024 at 12:25:27PM +0200, Matthieu Baerts (NGI0) wrote:
> >> mptcp_get_available_schedulers() needs to iterate over the schedulers'
> >> list only to read the names: it doesn't modify anything there.
> >>
> >> In this case, it is enough to hold the RCU read lock, no need to combine
> >> this with the associated spin lock.
> >>
> >> Fixes: 73c900aa3660 ("mptcp: add net.mptcp.available_schedulers")
> >> Cc: stable@vger.kernel.org
> >> Suggested-by: Paolo Abeni <pabeni@redhat.com>
> >> Reviewed-by: Geliang Tang <geliang@kernel.org>
> >> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
> >
> > I do wonder if it would be more appropriate to route this via net-next
> > (without a fixes tag) rather than via net. But either way this looks good
> > to me.
> Good point. On one hand, I marked it as a fix, because when working on
> the patch 1/3, we noticed these spin_(un)lock() were not supposed to be
> there in the first place. On the other hand, even it's fixing a small
> performance issue, it is not fixing a regression.
>
> I think it is easier to route this via -net, but I'm fine if it is
> applied in net-next.
Understood. FTR, I don't feel strongly about this either way.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net 2/3] mptcp: remove unneeded lock when listing scheds
2024-10-23 14:13 ` Matthieu Baerts
2024-10-25 10:00 ` Simon Horman
@ 2024-10-28 22:53 ` Jakub Kicinski
1 sibling, 0 replies; 9+ messages in thread
From: Jakub Kicinski @ 2024-10-28 22:53 UTC (permalink / raw)
To: Matthieu Baerts
Cc: Simon Horman, mptcp, Mat Martineau, Geliang Tang, David S. Miller,
Eric Dumazet, Paolo Abeni, Gregory Detal, Shuah Khan, netdev,
linux-kernel, linux-kselftest, stable
On Wed, 23 Oct 2024 16:13:36 +0200 Matthieu Baerts wrote:
> On 23/10/2024 14:21, Simon Horman wrote:
> > On Mon, Oct 21, 2024 at 12:25:27PM +0200, Matthieu Baerts (NGI0) wrote:
> >> mptcp_get_available_schedulers() needs to iterate over the schedulers'
> >> list only to read the names: it doesn't modify anything there.
> >>
> >> In this case, it is enough to hold the RCU read lock, no need to combine
> >> this with the associated spin lock.
> >>
> >> Fixes: 73c900aa3660 ("mptcp: add net.mptcp.available_schedulers")
> >> Cc: stable@vger.kernel.org
> >> Suggested-by: Paolo Abeni <pabeni@redhat.com>
> >> Reviewed-by: Geliang Tang <geliang@kernel.org>
> >> Signed-off-by: Matthieu Baerts (NGI0) <matttbe@kernel.org>
> >
> > I do wonder if it would be more appropriate to route this via net-next
> > (without a fixes tag) rather than via net. But either way this looks good
> > to me.
> Good point. On one hand, I marked it as a fix, because when working on
> the patch 1/3, we noticed these spin_(un)lock() were not supposed to be
> there in the first place. On the other hand, even it's fixing a small
> performance issue, it is not fixing a regression.
>
> I think it is easier to route this via -net, but I'm fine if it is
> applied in net-next.
I agree with Simon's initial response. Let's not blur the lines.
Please re-queue for net-next, I'll apply the rest.
BTW thanks a lot for proactively fixing the CONFIG_PROVE_RCU_LIST
splats!
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH net 0/3] mptcp: sched: fix some lock issues
2024-10-21 10:25 [PATCH net 0/3] mptcp: sched: fix some lock issues Matthieu Baerts (NGI0)
2024-10-21 10:25 ` [PATCH net 1/3] mptcp: init: protect sched with rcu_read_lock Matthieu Baerts (NGI0)
2024-10-21 10:25 ` [PATCH net 2/3] mptcp: remove unneeded lock when listing scheds Matthieu Baerts (NGI0)
@ 2024-10-28 23:00 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 9+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-10-28 23:00 UTC (permalink / raw)
To: Matthieu Baerts
Cc: mptcp, martineau, geliang, davem, edumazet, kuba, pabeni, horms,
gregory.detal, shuah, netdev, linux-kernel, linux-kselftest,
stable
Hello:
This series was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Mon, 21 Oct 2024 12:25:25 +0200 you wrote:
> Two small fixes related to the MPTCP packets scheduler:
>
> - Patch 1: add missing rcu_read_(un)lock(). A fix for >= 6.6.
>
> - Patch 2: remove unneeded lock when listing packets schedulers. A fix
> for >= 6.10.
>
> [...]
Here is the summary with links:
- [net,1/3] mptcp: init: protect sched with rcu_read_lock
https://git.kernel.org/netdev/net/c/3deb12c788c3
- [net,2/3] mptcp: remove unneeded lock when listing scheds
(no matching commit)
- [net,3/3] selftests: mptcp: list sysctl data
https://git.kernel.org/netdev/net/c/5513dc1d8fec
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-10-28 23:00 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-21 10:25 [PATCH net 0/3] mptcp: sched: fix some lock issues Matthieu Baerts (NGI0)
2024-10-21 10:25 ` [PATCH net 1/3] mptcp: init: protect sched with rcu_read_lock Matthieu Baerts (NGI0)
2024-10-23 12:19 ` Simon Horman
2024-10-21 10:25 ` [PATCH net 2/3] mptcp: remove unneeded lock when listing scheds Matthieu Baerts (NGI0)
2024-10-23 12:21 ` Simon Horman
2024-10-23 14:13 ` Matthieu Baerts
2024-10-25 10:00 ` Simon Horman
2024-10-28 22:53 ` Jakub Kicinski
2024-10-28 23:00 ` [PATCH net 0/3] mptcp: sched: fix some lock issues patchwork-bot+netdevbpf
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox