| From c54e4ddfcd08aa11fcf5410f12918f2b415bbf0b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 13 Apr 2022 11:43:19 -0600 |
| Subject: l3mdev: l3mdev_master_upper_ifindex_by_index_rcu should be using |
| netdev_master_upper_dev_get_rcu |
| |
| From: David Ahern <dsahern@kernel.org> |
| |
| [ Upstream commit 83daab06252ee5d0e1f4373ff28b79304945fc19 ] |
| |
| Next patch uses l3mdev_master_upper_ifindex_by_index_rcu which throws |
| a splat with debug kernels: |
| |
| [13783.087570] ------------[ cut here ]------------ |
| [13783.093974] RTNL: assertion failed at net/core/dev.c (6702) |
| [13783.100761] WARNING: CPU: 3 PID: 51132 at net/core/dev.c:6702 netdev_master_upper_dev_get+0x16a/0x1a0 |
| |
| [13783.184226] CPU: 3 PID: 51132 Comm: kworker/3:3 Not tainted 5.17.0-custom-100090-g6f963aafb1cc #682 |
| [13783.194788] Hardware name: Mellanox Technologies Ltd. MSN2010/SA002610, BIOS 5.6.5 08/24/2017 |
| [13783.204755] Workqueue: mld mld_ifc_work [ipv6] |
| [13783.210338] RIP: 0010:netdev_master_upper_dev_get+0x16a/0x1a0 |
| [13783.217209] Code: 0f 85 e3 fe ff ff e8 65 ac ec fe ba 2e 1a 00 00 48 c7 c6 60 6f 38 83 48 c7 c7 c0 70 38 83 c6 05 5e b5 d7 01 01 e8 c6 29 52 00 <0f> 0b e9 b8 fe ff ff e8 5a 6c 35 ff e9 1c ff ff ff 48 89 ef e8 7d |
| [13783.238659] RSP: 0018:ffffc9000b37f5a8 EFLAGS: 00010286 |
| [13783.244995] RAX: 0000000000000000 RBX: ffff88812ee5c000 RCX: 0000000000000000 |
| [13783.253379] RDX: ffff88811ce09d40 RSI: ffffffff812d0fcd RDI: fffff5200166fea7 |
| [13783.261769] RBP: 0000000000000000 R08: 0000000000000001 R09: ffff8882375f4287 |
| [13783.270138] R10: ffffed1046ebe850 R11: 0000000000000001 R12: dffffc0000000000 |
| [13783.278510] R13: 0000000000000275 R14: ffffc9000b37f688 R15: ffff8881273b4af8 |
| [13783.286870] FS: 0000000000000000(0000) GS:ffff888237400000(0000) knlGS:0000000000000000 |
| [13783.296352] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 |
| [13783.303177] CR2: 00007ff25fc9b2e8 CR3: 0000000174d23000 CR4: 00000000001006e0 |
| [13783.311546] Call Trace: |
| [13783.314660] <TASK> |
| [13783.317553] l3mdev_master_upper_ifindex_by_index_rcu+0x43/0xe0 |
| ... |
| |
| Change l3mdev_master_upper_ifindex_by_index_rcu to use |
| netdev_master_upper_dev_get_rcu. |
| |
| Fixes: 6a6d6681ac1a ("l3mdev: add function to retreive upper master") |
| Signed-off-by: Ido Schimmel <idosch@idosch.org> |
| Signed-off-by: David Ahern <dsahern@kernel.org> |
| Cc: Alexis Bauvin <abauvin@scaleway.com> |
| Signed-off-by: Jakub Kicinski <kuba@kernel.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| net/l3mdev/l3mdev.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/net/l3mdev/l3mdev.c b/net/l3mdev/l3mdev.c |
| index f35899d45a9a..ff4352f6d168 100644 |
| --- a/net/l3mdev/l3mdev.c |
| +++ b/net/l3mdev/l3mdev.c |
| @@ -54,7 +54,7 @@ int l3mdev_master_upper_ifindex_by_index_rcu(struct net *net, int ifindex) |
| |
| dev = dev_get_by_index_rcu(net, ifindex); |
| while (dev && !netif_is_l3_master(dev)) |
| - dev = netdev_master_upper_dev_get(dev); |
| + dev = netdev_master_upper_dev_get_rcu(dev); |
| |
| return dev ? dev->ifindex : 0; |
| } |
| -- |
| 2.35.1 |
| |