Thomas Bogendoerfer 7ee2bb
From: Maor Dickman <maord@nvidia.com>
Thomas Bogendoerfer 7ee2bb
Date: Wed, 29 Dec 2021 16:10:41 +0200
Thomas Bogendoerfer 7ee2bb
Subject: net/mlx5e: Fix wrong usage of fib_info_nh when routes with nexthop
Thomas Bogendoerfer 7ee2bb
 objects are used
Thomas Bogendoerfer 7ee2bb
Patch-mainline: v5.17-rc1
Thomas Bogendoerfer 7ee2bb
Git-commit: 885751eb1b01d276e38f57d78c583e4ce006c5ed
Thomas Bogendoerfer 7ee2bb
References: git-fixes
Thomas Bogendoerfer 7ee2bb
Thomas Bogendoerfer 7ee2bb
Creating routes with nexthop objects while in switchdev mode leads to access to
Thomas Bogendoerfer 7ee2bb
un-allocated memory and trigger bellow call trace due to hitting WARN_ON.
Thomas Bogendoerfer 7ee2bb
This is caused due to illegal usage of fib_info_nh in TC tunnel FIB event handling to
Thomas Bogendoerfer 7ee2bb
resolve the FIB device while fib_info built in with nexthop.
Thomas Bogendoerfer 7ee2bb
Thomas Bogendoerfer 7ee2bb
Fixed by ignoring attempts to use nexthop objects with routes until support can be
Thomas Bogendoerfer 7ee2bb
properly added.
Thomas Bogendoerfer 7ee2bb
Thomas Bogendoerfer 7ee2bb
WARNING: CPU: 1 PID: 1724 at include/net/nexthop.h:468 mlx5e_tc_tun_fib_event+0x448/0x570 [mlx5_core]
Thomas Bogendoerfer 7ee2bb
CPU: 1 PID: 1724 Comm: ip Not tainted 5.15.0_for_upstream_min_debug_2021_11_09_02_04 #1
Thomas Bogendoerfer 7ee2bb
RIP: 0010:mlx5e_tc_tun_fib_event+0x448/0x570 [mlx5_core]
Thomas Bogendoerfer 7ee2bb
RSP: 0018:ffff8881349f7910 EFLAGS: 00010202
Thomas Bogendoerfer 7ee2bb
RAX: ffff8881492f1980 RBX: ffff8881349f79e8 RCX: 0000000000000000
Thomas Bogendoerfer 7ee2bb
RDX: ffff8881349f79e8 RSI: 0000000000000000 RDI: 0000000000000000
Thomas Bogendoerfer 7ee2bb
RBP: ffff8881349f7950 R08: 00000000000000fe R09: 0000000000000001
Thomas Bogendoerfer 7ee2bb
R10: 0000000000000000 R11: 0000000000000000 R12: ffff88811e9d0000
Thomas Bogendoerfer 7ee2bb
R13: ffff88810eb62000 R14: ffff888106710268 R15: 0000000000000018
Thomas Bogendoerfer 7ee2bb
FS:  00007f1d5ca6e800(0000) GS:ffff88852c880000(0000) knlGS:0000000000000000
Thomas Bogendoerfer 7ee2bb
CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
Thomas Bogendoerfer 7ee2bb
CR2: 00007ffedba44ff8 CR3: 0000000129808004 CR4: 0000000000370ea0
Thomas Bogendoerfer 7ee2bb
DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
Thomas Bogendoerfer 7ee2bb
DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
Thomas Bogendoerfer 7ee2bb
Call Trace:
Thomas Bogendoerfer 7ee2bb
 <TASK>
Thomas Bogendoerfer 7ee2bb
 atomic_notifier_call_chain+0x42/0x60
Thomas Bogendoerfer 7ee2bb
 call_fib_notifiers+0x21/0x40
Thomas Bogendoerfer 7ee2bb
 fib_table_insert+0x479/0x6d0
Thomas Bogendoerfer 7ee2bb
 ? try_charge_memcg+0x480/0x6d0
Thomas Bogendoerfer 7ee2bb
 inet_rtm_newroute+0x65/0xb0
Thomas Bogendoerfer 7ee2bb
 rtnetlink_rcv_msg+0x2af/0x360
Thomas Bogendoerfer 7ee2bb
 ? page_add_file_rmap+0x13/0x130
Thomas Bogendoerfer 7ee2bb
 ? do_set_pte+0xcd/0x120
Thomas Bogendoerfer 7ee2bb
 ? rtnl_calcit.isra.0+0x120/0x120
Thomas Bogendoerfer 7ee2bb
 netlink_rcv_skb+0x4e/0xf0
Thomas Bogendoerfer 7ee2bb
 netlink_unicast+0x1ee/0x2b0
Thomas Bogendoerfer 7ee2bb
 netlink_sendmsg+0x22e/0x460
Thomas Bogendoerfer 7ee2bb
 sock_sendmsg+0x33/0x40
Thomas Bogendoerfer 7ee2bb
 ____sys_sendmsg+0x1d1/0x1f0
Thomas Bogendoerfer 7ee2bb
 ___sys_sendmsg+0xab/0xf0
Thomas Bogendoerfer 7ee2bb
 ? __mod_memcg_lruvec_state+0x40/0x60
Thomas Bogendoerfer 7ee2bb
 ? __mod_lruvec_page_state+0x95/0xd0
Thomas Bogendoerfer 7ee2bb
 ? page_add_new_anon_rmap+0x4e/0xf0
Thomas Bogendoerfer 7ee2bb
 ? __handle_mm_fault+0xec6/0x1470
Thomas Bogendoerfer 7ee2bb
 __sys_sendmsg+0x51/0x90
Thomas Bogendoerfer 7ee2bb
 ? internal_get_user_pages_fast+0x480/0xa10
Thomas Bogendoerfer 7ee2bb
 do_syscall_64+0x3d/0x90
Thomas Bogendoerfer 7ee2bb
 entry_SYSCALL_64_after_hwframe+0x44/0xae
Thomas Bogendoerfer 7ee2bb
Thomas Bogendoerfer 7ee2bb
Fixes: 8914add2c9e5 ("net/mlx5e: Handle FIB events to update tunnel endpoint device")
Thomas Bogendoerfer 7ee2bb
Signed-off-by: Maor Dickman <maord@nvidia.com>
Thomas Bogendoerfer 7ee2bb
Reviewed-by: Vlad Buslov <vladbu@nvidia.com>
Thomas Bogendoerfer 7ee2bb
Reviewed-by: Roi Dayan <roid@nvidia.com>
Thomas Bogendoerfer 7ee2bb
Signed-off-by: Saeed Mahameed <saeedm@nvidia.com>
Thomas Bogendoerfer 7ee2bb
Acked-by: Thomas Bogendoerfer <tbogendoerfer@suse.de>
Thomas Bogendoerfer 7ee2bb
---
Thomas Bogendoerfer 7ee2bb
 drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c |    2 ++
Thomas Bogendoerfer 7ee2bb
 1 file changed, 2 insertions(+)
Thomas Bogendoerfer 7ee2bb
Thomas Bogendoerfer 7ee2bb
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c
Thomas Bogendoerfer 7ee2bb
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/tc_tun_encap.c
Thomas Bogendoerfer 7ee2bb
@@ -1579,6 +1579,8 @@ mlx5e_init_fib_work_ipv4(struct mlx5e_pr
Thomas Bogendoerfer 7ee2bb
 	struct net_device *fib_dev;
Thomas Bogendoerfer 7ee2bb
 
Thomas Bogendoerfer 7ee2bb
 	fen_info = container_of(info, struct fib_entry_notifier_info, info);
Thomas Bogendoerfer 7ee2bb
+	if (fen_info->fi->nh)
Thomas Bogendoerfer 7ee2bb
+		return NULL;
Thomas Bogendoerfer 7ee2bb
 	fib_dev = fib_info_nh(fen_info->fi, 0)->fib_nh_dev;
Thomas Bogendoerfer 7ee2bb
 	if (!fib_dev || fib_dev->netdev_ops != &mlx5e_netdev_ops ||
Thomas Bogendoerfer 7ee2bb
 	    fen_info->dst_len != 32)