]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/blob - queue-6.8/net-smc-reduce-rtnl-pressure-in-smc_pnet_create_pnet.patch
b332611ffee4e0d5dce40c9ac79d0bdc7e19f04e
[thirdparty/kernel/stable-queue.git] / queue-6.8 / net-smc-reduce-rtnl-pressure-in-smc_pnet_create_pnet.patch
1 From 3c2681396652decff4615b9f455b9f40f19da675 Mon Sep 17 00:00:00 2001
2 From: Sasha Levin <sashal@kernel.org>
3 Date: Sat, 2 Mar 2024 10:07:44 +0000
4 Subject: net/smc: reduce rtnl pressure in smc_pnet_create_pnetids_list()
5
6 From: Eric Dumazet <edumazet@google.com>
7
8 [ Upstream commit 00af2aa93b76b1bade471ad0d0525d4d29ca5cc0 ]
9
10 Many syzbot reports show extreme rtnl pressure, and many of them hint
11 that smc acquires rtnl in netns creation for no good reason [1]
12
13 This patch returns early from smc_pnet_net_init()
14 if there is no netdevice yet.
15
16 I am not even sure why smc_pnet_create_pnetids_list() even exists,
17 because smc_pnet_netdev_event() is also calling
18 smc_pnet_add_base_pnetid() when handling NETDEV_UP event.
19
20 [1] extract of typical syzbot reports
21
22 2 locks held by syz-executor.3/12252:
23 #0: ffffffff8f369610 (pernet_ops_rwsem){++++}-{3:3}, at: copy_net_ns+0x4c7/0x7b0 net/core/net_namespace.c:491
24 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_create_pnetids_list net/smc/smc_pnet.c:809 [inline]
25 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_net_init+0x10a/0x1e0 net/smc/smc_pnet.c:878
26 2 locks held by syz-executor.4/12253:
27 #0: ffffffff8f369610 (pernet_ops_rwsem){++++}-{3:3}, at: copy_net_ns+0x4c7/0x7b0 net/core/net_namespace.c:491
28 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_create_pnetids_list net/smc/smc_pnet.c:809 [inline]
29 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_net_init+0x10a/0x1e0 net/smc/smc_pnet.c:878
30 2 locks held by syz-executor.1/12257:
31 #0: ffffffff8f369610 (pernet_ops_rwsem){++++}-{3:3}, at: copy_net_ns+0x4c7/0x7b0 net/core/net_namespace.c:491
32 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_create_pnetids_list net/smc/smc_pnet.c:809 [inline]
33 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_net_init+0x10a/0x1e0 net/smc/smc_pnet.c:878
34 2 locks held by syz-executor.2/12261:
35 #0: ffffffff8f369610 (pernet_ops_rwsem){++++}-{3:3}, at: copy_net_ns+0x4c7/0x7b0 net/core/net_namespace.c:491
36 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_create_pnetids_list net/smc/smc_pnet.c:809 [inline]
37 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_net_init+0x10a/0x1e0 net/smc/smc_pnet.c:878
38 2 locks held by syz-executor.0/12265:
39 #0: ffffffff8f369610 (pernet_ops_rwsem){++++}-{3:3}, at: copy_net_ns+0x4c7/0x7b0 net/core/net_namespace.c:491
40 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_create_pnetids_list net/smc/smc_pnet.c:809 [inline]
41 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_net_init+0x10a/0x1e0 net/smc/smc_pnet.c:878
42 2 locks held by syz-executor.3/12268:
43 #0: ffffffff8f369610 (pernet_ops_rwsem){++++}-{3:3}, at: copy_net_ns+0x4c7/0x7b0 net/core/net_namespace.c:491
44 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_create_pnetids_list net/smc/smc_pnet.c:809 [inline]
45 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_net_init+0x10a/0x1e0 net/smc/smc_pnet.c:878
46 2 locks held by syz-executor.4/12271:
47 #0: ffffffff8f369610 (pernet_ops_rwsem){++++}-{3:3}, at: copy_net_ns+0x4c7/0x7b0 net/core/net_namespace.c:491
48 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_create_pnetids_list net/smc/smc_pnet.c:809 [inline]
49 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_net_init+0x10a/0x1e0 net/smc/smc_pnet.c:878
50 2 locks held by syz-executor.1/12274:
51 #0: ffffffff8f369610 (pernet_ops_rwsem){++++}-{3:3}, at: copy_net_ns+0x4c7/0x7b0 net/core/net_namespace.c:491
52 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_create_pnetids_list net/smc/smc_pnet.c:809 [inline]
53 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_net_init+0x10a/0x1e0 net/smc/smc_pnet.c:878
54 2 locks held by syz-executor.2/12280:
55 #0: ffffffff8f369610 (pernet_ops_rwsem){++++}-{3:3}, at: copy_net_ns+0x4c7/0x7b0 net/core/net_namespace.c:491
56 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_create_pnetids_list net/smc/smc_pnet.c:809 [inline]
57 #1: ffffffff8f375b88 (rtnl_mutex){+.+.}-{3:3}, at: smc_pnet_net_init+0x10a/0x1e0 net/smc/smc_pnet.c:878
58
59 Signed-off-by: Eric Dumazet <edumazet@google.com>
60 Cc: Wenjia Zhang <wenjia@linux.ibm.com>
61 Cc: Jan Karcher <jaka@linux.ibm.com>
62 Cc: "D. Wythe" <alibuda@linux.alibaba.com>
63 Cc: Tony Lu <tonylu@linux.alibaba.com>
64 Cc: Wen Gu <guwen@linux.alibaba.com>
65 Reviewed-by: Wenjia Zhang <wenjia@linux.ibm.com>
66 Link: https://lore.kernel.org/r/20240302100744.3868021-1-edumazet@google.com
67 Signed-off-by: Paolo Abeni <pabeni@redhat.com>
68 Signed-off-by: Sasha Levin <sashal@kernel.org>
69 ---
70 net/smc/smc_pnet.c | 10 ++++++++++
71 1 file changed, 10 insertions(+)
72
73 diff --git a/net/smc/smc_pnet.c b/net/smc/smc_pnet.c
74 index 9f2c58c5a86b7..2adb92b8c4699 100644
75 --- a/net/smc/smc_pnet.c
76 +++ b/net/smc/smc_pnet.c
77 @@ -806,6 +806,16 @@ static void smc_pnet_create_pnetids_list(struct net *net)
78 u8 ndev_pnetid[SMC_MAX_PNETID_LEN];
79 struct net_device *dev;
80
81 + /* Newly created netns do not have devices.
82 + * Do not even acquire rtnl.
83 + */
84 + if (list_empty(&net->dev_base_head))
85 + return;
86 +
87 + /* Note: This might not be needed, because smc_pnet_netdev_event()
88 + * is also calling smc_pnet_add_base_pnetid() when handling
89 + * NETDEV_UP event.
90 + */
91 rtnl_lock();
92 for_each_netdev(net, dev)
93 smc_pnet_add_base_pnetid(net, dev, ndev_pnetid);
94 --
95 2.43.0
96