Patch "net/mlx5e: TC, Fix using eswitch mapping in nic mode" has been added to the 6.3-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    net/mlx5e: TC, Fix using eswitch mapping in nic mode

to the 6.3-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:
     net-mlx5e-tc-fix-using-eswitch-mapping-in-nic-mode.patch
and it can be found in the queue-6.3 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit cfa5835a7818f0d12bf062b2136bc68cbe57e8fa
Author: Paul Blakey <paulb@xxxxxxxxxx>
Date:   Wed Apr 26 16:04:48 2023 +0300

    net/mlx5e: TC, Fix using eswitch mapping in nic mode
    
    [ Upstream commit dfa1e46d6093831b9d49f0f350227a1d13644a2f ]
    
    Cited patch is using the eswitch object mapping pool while
    in nic mode where it isn't initialized. This results in the
    trace below [0].
    
    Fix that by using either nic or eswitch object mapping pool
    depending if eswitch is enabled or not.
    
    [0]:
    [  826.446057] ==================================================================
    [  826.446729] BUG: KASAN: slab-use-after-free in mlx5_add_flow_rules+0x30/0x490 [mlx5_core]
    [  826.447515] Read of size 8 at addr ffff888194485830 by task tc/6233
    
    [  826.448243] CPU: 16 PID: 6233 Comm: tc Tainted: G        W          6.3.0-rc6+ #1
    [  826.448890] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS rel-1.13.0-0-gf21b5a4aeb02-prebuilt.qemu.org 04/01/2014
    [  826.449785] Call Trace:
    [  826.450052]  <TASK>
    [  826.450302]  dump_stack_lvl+0x33/0x50
    [  826.450650]  print_report+0xc2/0x610
    [  826.450998]  ? __virt_addr_valid+0xb1/0x130
    [  826.451385]  ? mlx5_add_flow_rules+0x30/0x490 [mlx5_core]
    [  826.451935]  kasan_report+0xae/0xe0
    [  826.452276]  ? mlx5_add_flow_rules+0x30/0x490 [mlx5_core]
    [  826.452829]  mlx5_add_flow_rules+0x30/0x490 [mlx5_core]
    [  826.453368]  ? __kmalloc_node+0x5a/0x120
    [  826.453733]  esw_add_restore_rule+0x20f/0x270 [mlx5_core]
    [  826.454288]  ? mlx5_eswitch_add_send_to_vport_meta_rule+0x260/0x260 [mlx5_core]
    [  826.455011]  ? mutex_unlock+0x80/0xd0
    [  826.455361]  ? __mutex_unlock_slowpath.constprop.0+0x210/0x210
    [  826.455862]  ? mapping_add+0x2cb/0x440 [mlx5_core]
    [  826.456425]  mlx5e_tc_action_miss_mapping_get+0x139/0x180 [mlx5_core]
    [  826.457058]  ? mlx5e_tc_update_skb_nic+0xb0/0xb0 [mlx5_core]
    [  826.457636]  ? __kasan_kmalloc+0x77/0x90
    [  826.458000]  ? __kmalloc+0x57/0x120
    [  826.458336]  mlx5_tc_ct_flow_offload+0x325/0xe40 [mlx5_core]
    [  826.458916]  ? ct_kernel_enter.constprop.0+0x48/0xa0
    [  826.459360]  ? mlx5_tc_ct_parse_action+0xf0/0xf0 [mlx5_core]
    [  826.459933]  ? mlx5e_mod_hdr_attach+0x491/0x520 [mlx5_core]
    [  826.460507]  ? mlx5e_mod_hdr_get+0x12/0x20 [mlx5_core]
    [  826.461046]  ? mlx5e_tc_attach_mod_hdr+0x154/0x170 [mlx5_core]
    [  826.461635]  mlx5e_configure_flower+0x969/0x2110 [mlx5_core]
    [  826.462217]  ? _raw_spin_lock_bh+0x85/0xe0
    [  826.462597]  ? __mlx5e_add_fdb_flow+0x750/0x750 [mlx5_core]
    [  826.463163]  ? kasan_save_stack+0x2e/0x40
    [  826.463534]  ? down_read+0x115/0x1b0
    [  826.463878]  ? down_write_killable+0x110/0x110
    [  826.464288]  ? tc_setup_action.part.0+0x9f/0x3b0
    [  826.464701]  ? mlx5e_is_uplink_rep+0x4c/0x90 [mlx5_core]
    [  826.465253]  ? mlx5e_tc_reoffload_flows_work+0x130/0x130 [mlx5_core]
    [  826.465878]  tc_setup_cb_add+0x112/0x250
    [  826.466247]  fl_hw_replace_filter+0x230/0x310 [cls_flower]
    [  826.466724]  ? fl_hw_destroy_filter+0x1a0/0x1a0 [cls_flower]
    [  826.467212]  fl_change+0x14e1/0x2030 [cls_flower]
    [  826.467636]  ? sock_def_readable+0x89/0x120
    [  826.468019]  ? fl_tmplt_create+0x2d0/0x2d0 [cls_flower]
    [  826.468509]  ? kasan_unpoison+0x23/0x50
    [  826.468873]  ? get_random_u16+0x180/0x180
    [  826.469244]  ? __radix_tree_lookup+0x2b/0x130
    [  826.469640]  ? fl_get+0x7b/0x140 [cls_flower]
    [  826.470042]  ? fl_mask_put+0x200/0x200 [cls_flower]
    [  826.470478]  ? __mutex_unlock_slowpath.constprop.0+0x210/0x210
    [  826.470973]  ? fl_tmplt_create+0x2d0/0x2d0 [cls_flower]
    [  826.471427]  tc_new_tfilter+0x644/0x1050
    [  826.471795]  ? tc_get_tfilter+0x860/0x860
    [  826.472170]  ? __thaw_task+0x130/0x130
    [  826.472525]  ? arch_stack_walk+0x98/0xf0
    [  826.472892]  ? cap_capable+0x9f/0xd0
    [  826.473235]  ? security_capable+0x47/0x60
    [  826.473608]  rtnetlink_rcv_msg+0x1d5/0x550
    [  826.473985]  ? rtnl_calcit.isra.0+0x1f0/0x1f0
    [  826.474383]  ? __stack_depot_save+0x35/0x4c0
    [  826.474779]  ? kasan_save_stack+0x2e/0x40
    [  826.475149]  ? kasan_save_stack+0x1e/0x40
    [  826.475518]  ? __kasan_record_aux_stack+0x9f/0xb0
    [  826.475939]  ? task_work_add+0x77/0x1c0
    [  826.476305]  netlink_rcv_skb+0xe0/0x210
    [  826.476661]  ? rtnl_calcit.isra.0+0x1f0/0x1f0
    [  826.477057]  ? netlink_ack+0x7c0/0x7c0
    [  826.477412]  ? rhashtable_jhash2+0xef/0x150
    [  826.477796]  ? _copy_from_iter+0x105/0x770
    [  826.484386]  netlink_unicast+0x346/0x490
    [  826.484755]  ? netlink_attachskb+0x400/0x400
    [  826.485145]  ? kernel_text_address+0xc2/0xd0
    [  826.485535]  netlink_sendmsg+0x3b0/0x6c0
    [  826.485902]  ? kernel_text_address+0xc2/0xd0
    [  826.486296]  ? netlink_unicast+0x490/0x490
    [  826.486671]  ? iovec_from_user.part.0+0x7a/0x1a0
    [  826.487083]  ? netlink_unicast+0x490/0x490
    [  826.487461]  sock_sendmsg+0x73/0xc0
    [  826.487803]  ____sys_sendmsg+0x364/0x380
    [  826.488186]  ? import_iovec+0x7/0x10
    [  826.488531]  ? kernel_sendmsg+0x30/0x30
    [  826.488893]  ? __copy_msghdr+0x180/0x180
    [  826.489258]  ? kasan_save_stack+0x2e/0x40
    [  826.489629]  ? kasan_save_stack+0x1e/0x40
    [  826.490002]  ? __kasan_record_aux_stack+0x9f/0xb0
    [  826.490424]  ? __call_rcu_common.constprop.0+0x46/0x580
    [  826.490876]  ___sys_sendmsg+0xdf/0x140
    [  826.491231]  ? copy_msghdr_from_user+0x110/0x110
    [  826.491649]  ? fget_raw+0x120/0x120
    [  826.491988]  ? ___sys_recvmsg+0xd9/0x130
    [  826.492355]  ? folio_batch_add_and_move+0x80/0xa0
    [  826.492776]  ? _raw_spin_lock+0x7a/0xd0
    [  826.493137]  ? _raw_spin_lock+0x7a/0xd0
    [  826.493500]  ? _raw_read_lock_irq+0x30/0x30
    [  826.493880]  ? kasan_set_track+0x21/0x30
    [  826.494249]  ? kasan_save_free_info+0x2a/0x40
    [  826.494650]  ? do_sys_openat2+0xff/0x270
    [  826.495016]  ? __fget_light+0x1b5/0x200
    [  826.495377]  ? __virt_addr_valid+0xb1/0x130
    [  826.495763]  __sys_sendmsg+0xb2/0x130
    [  826.496118]  ? __sys_sendmsg_sock+0x20/0x20
    [  826.496501]  ? __x64_sys_rseq+0x2e0/0x2e0
    [  826.496874]  ? do_user_addr_fault+0x276/0x820
    [  826.497273]  ? fpregs_assert_state_consistent+0x52/0x60
    [  826.497727]  ? exit_to_user_mode_prepare+0x30/0x120
    [  826.498158]  do_syscall_64+0x3d/0x90
    [  826.498502]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
    [  826.498949] RIP: 0033:0x7f9b67f4f887
    [  826.499294] Code: 0a 00 f7 d8 64 89 02 48 c7 c0 ff ff ff ff eb b9 0f 1f 00 f3 0f 1e fa 64 8b 04 25 18 00 00 00 85 c0 75 10 b8 2e 00 00 00 0f 05 <48> 3d 00 f0 ff ff 77 51 c3 48 83 ec 28 89 54 24 1c 48 89 74 24 10
    [  826.500742] RSP: 002b:00007fff5d1a5498 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
    [  826.501395] RAX: ffffffffffffffda RBX: 0000000064413ce6 RCX: 00007f9b67f4f887
    [  826.501975] RDX: 0000000000000000 RSI: 00007fff5d1a5500 RDI: 0000000000000003
    [  826.502556] RBP: 0000000000000000 R08: 0000000000000001 R09: 0000000000000001
    [  826.503135] R10: 00007f9b67e08708 R11: 0000000000000246 R12: 0000000000000001
    [  826.503714] R13: 0000000000000001 R14: 00007fff5d1a9800 R15: 0000000000485400
    [  826.504304]  </TASK>
    
    [  826.504753] Allocated by task 3764:
    [  826.505090]  kasan_save_stack+0x1e/0x40
    [  826.505453]  kasan_set_track+0x21/0x30
    [  826.505810]  __kasan_kmalloc+0x77/0x90
    [  826.506164]  __mlx5_create_flow_table+0x16d/0xbb0 [mlx5_core]
    [  826.506742]  esw_offloads_enable+0x60d/0xfb0 [mlx5_core]
    [  826.507292]  mlx5_eswitch_enable_locked+0x4d3/0x680 [mlx5_core]
    [  826.507885]  mlx5_devlink_eswitch_mode_set+0x2a3/0x580 [mlx5_core]
    [  826.508513]  devlink_nl_cmd_eswitch_set_doit+0xdf/0x1f0
    [  826.508969]  genl_family_rcv_msg_doit.isra.0+0x146/0x1c0
    [  826.509427]  genl_rcv_msg+0x28d/0x3e0
    [  826.509772]  netlink_rcv_skb+0xe0/0x210
    [  826.510133]  genl_rcv+0x24/0x40
    [  826.510448]  netlink_unicast+0x346/0x490
    [  826.510810]  netlink_sendmsg+0x3b0/0x6c0
    [  826.511179]  sock_sendmsg+0x73/0xc0
    [  826.511519]  __sys_sendto+0x18d/0x220
    [  826.511867]  __x64_sys_sendto+0x72/0x80
    [  826.512232]  do_syscall_64+0x3d/0x90
    [  826.512576]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    [  826.513220] Freed by task 5674:
    [  826.513535]  kasan_save_stack+0x1e/0x40
    [  826.513893]  kasan_set_track+0x21/0x30
    [  826.514245]  kasan_save_free_info+0x2a/0x40
    [  826.514629]  ____kasan_slab_free+0x11a/0x1b0
    [  826.515021]  __kmem_cache_free+0x14d/0x280
    [  826.515399]  tree_put_node+0x109/0x1c0 [mlx5_core]
    [  826.515907]  mlx5_destroy_flow_table+0x119/0x630 [mlx5_core]
    [  826.516481]  esw_offloads_steering_cleanup+0xe7/0x150 [mlx5_core]
    [  826.517084]  esw_offloads_disable+0xe0/0x160 [mlx5_core]
    [  826.517632]  mlx5_eswitch_disable_locked+0x26c/0x290 [mlx5_core]
    [  826.518225]  mlx5_devlink_eswitch_mode_set+0x128/0x580 [mlx5_core]
    [  826.518834]  devlink_nl_cmd_eswitch_set_doit+0xdf/0x1f0
    [  826.519286]  genl_family_rcv_msg_doit.isra.0+0x146/0x1c0
    [  826.519748]  genl_rcv_msg+0x28d/0x3e0
    [  826.520101]  netlink_rcv_skb+0xe0/0x210
    [  826.520458]  genl_rcv+0x24/0x40
    [  826.520771]  netlink_unicast+0x346/0x490
    [  826.521137]  netlink_sendmsg+0x3b0/0x6c0
    [  826.521505]  sock_sendmsg+0x73/0xc0
    [  826.521842]  __sys_sendto+0x18d/0x220
    [  826.522191]  __x64_sys_sendto+0x72/0x80
    [  826.522554]  do_syscall_64+0x3d/0x90
    [  826.522894]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    [  826.523540] Last potentially related work creation:
    [  826.523969]  kasan_save_stack+0x1e/0x40
    [  826.524331]  __kasan_record_aux_stack+0x9f/0xb0
    [  826.524739]  insert_work+0x30/0x130
    [  826.525078]  __queue_work+0x34b/0x690
    [  826.525426]  queue_work_on+0x48/0x50
    [  826.525766]  __rhashtable_remove_fast_one+0x4af/0x4d0 [mlx5_core]
    [  826.526365]  del_sw_flow_group+0x1b5/0x270 [mlx5_core]
    [  826.526898]  tree_put_node+0x109/0x1c0 [mlx5_core]
    [  826.527407]  esw_offloads_steering_cleanup+0xd3/0x150 [mlx5_core]
    [  826.528009]  esw_offloads_disable+0xe0/0x160 [mlx5_core]
    [  826.528616]  mlx5_eswitch_disable_locked+0x26c/0x290 [mlx5_core]
    [  826.529218]  mlx5_devlink_eswitch_mode_set+0x128/0x580 [mlx5_core]
    [  826.529823]  devlink_nl_cmd_eswitch_set_doit+0xdf/0x1f0
    [  826.530276]  genl_family_rcv_msg_doit.isra.0+0x146/0x1c0
    [  826.530733]  genl_rcv_msg+0x28d/0x3e0
    [  826.531079]  netlink_rcv_skb+0xe0/0x210
    [  826.531439]  genl_rcv+0x24/0x40
    [  826.531755]  netlink_unicast+0x346/0x490
    [  826.532123]  netlink_sendmsg+0x3b0/0x6c0
    [  826.532487]  sock_sendmsg+0x73/0xc0
    [  826.532825]  __sys_sendto+0x18d/0x220
    [  826.533175]  __x64_sys_sendto+0x72/0x80
    [  826.533533]  do_syscall_64+0x3d/0x90
    [  826.533877]  entry_SYSCALL_64_after_hwframe+0x46/0xb0
    
    [  826.534521] The buggy address belongs to the object at ffff888194485800
                    which belongs to the cache kmalloc-512 of size 512
    [  826.535506] The buggy address is located 48 bytes inside of
                    freed 512-byte region [ffff888194485800, ffff888194485a00)
    
    [  826.536666] The buggy address belongs to the physical page:
    [  826.537138] page:00000000d75841dd refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x194480
    [  826.537915] head:00000000d75841dd order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
    [  826.538595] flags: 0x200000000010200(slab|head|node=0|zone=2)
    [  826.539089] raw: 0200000000010200 ffff888100042c80 ffffea0004523800 dead000000000002
    [  826.539755] raw: 0000000000000000 0000000000200020 00000001ffffffff 0000000000000000
    [  826.540417] page dumped because: kasan: bad access detected
    
    [  826.541095] Memory state around the buggy address:
    [  826.541519]  ffff888194485700: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  826.542149]  ffff888194485780: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
    [  826.542773] >ffff888194485800: fa fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  826.543400]                                      ^
    [  826.543822]  ffff888194485880: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  826.544452]  ffff888194485900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
    [  826.545079] ==================================================================
    
    Fixes: 6702782845a5 ("net/mlx5e: TC, Set CT miss to the specific ct action instance")
    Signed-off-by: Paul Blakey <paulb@xxxxxxxxxx>
    Reviewed-by: Vlad Buslov <vladbu@xxxxxxxxxx>
    Signed-off-by: Saeed Mahameed <saeedm@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
index 2b1094e5b0c9d..53acd9a8a4c35 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_tc.c
@@ -5793,22 +5793,43 @@ bool mlx5e_tc_update_skb_nic(struct mlx5_cqe64 *cqe, struct sk_buff *skb)
 				   0, NULL);
 }
 
+static struct mapping_ctx *
+mlx5e_get_priv_obj_mapping(struct mlx5e_priv *priv)
+{
+	struct mlx5e_tc_table *tc;
+	struct mlx5_eswitch *esw;
+	struct mapping_ctx *ctx;
+
+	if (is_mdev_switchdev_mode(priv->mdev)) {
+		esw = priv->mdev->priv.eswitch;
+		ctx = esw->offloads.reg_c0_obj_pool;
+	} else {
+		tc = mlx5e_fs_get_tc(priv->fs);
+		ctx = tc->mapping;
+	}
+
+	return ctx;
+}
+
 int mlx5e_tc_action_miss_mapping_get(struct mlx5e_priv *priv, struct mlx5_flow_attr *attr,
 				     u64 act_miss_cookie, u32 *act_miss_mapping)
 {
-	struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
 	struct mlx5_mapped_obj mapped_obj = {};
+	struct mlx5_eswitch *esw;
 	struct mapping_ctx *ctx;
 	int err;
 
-	ctx = esw->offloads.reg_c0_obj_pool;
-
+	ctx = mlx5e_get_priv_obj_mapping(priv);
 	mapped_obj.type = MLX5_MAPPED_OBJ_ACT_MISS;
 	mapped_obj.act_miss_cookie = act_miss_cookie;
 	err = mapping_add(ctx, &mapped_obj, act_miss_mapping);
 	if (err)
 		return err;
 
+	if (!is_mdev_switchdev_mode(priv->mdev))
+		return 0;
+
+	esw = priv->mdev->priv.eswitch;
 	attr->act_id_restore_rule = esw_add_restore_rule(esw, *act_miss_mapping);
 	if (IS_ERR(attr->act_id_restore_rule))
 		goto err_rule;
@@ -5823,10 +5844,9 @@ int mlx5e_tc_action_miss_mapping_get(struct mlx5e_priv *priv, struct mlx5_flow_a
 void mlx5e_tc_action_miss_mapping_put(struct mlx5e_priv *priv, struct mlx5_flow_attr *attr,
 				      u32 act_miss_mapping)
 {
-	struct mlx5_eswitch *esw = priv->mdev->priv.eswitch;
-	struct mapping_ctx *ctx;
+	struct mapping_ctx *ctx = mlx5e_get_priv_obj_mapping(priv);
 
-	ctx = esw->offloads.reg_c0_obj_pool;
-	mlx5_del_flow_rules(attr->act_id_restore_rule);
+	if (is_mdev_switchdev_mode(priv->mdev))
+		mlx5_del_flow_rules(attr->act_id_restore_rule);
 	mapping_remove(ctx, act_miss_mapping);
 }



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux