• Ido Schimmel's avatar
    mlxsw: spectrum_acl_tcam: Move devlink param to TCAM code · 74cbc3c0
    Ido Schimmel authored
    Cited commit added 'DEVLINK_CMD_PARAM_DEL' notifications whenever the
    network namespace of the devlink instance is changed. Specifically, the
    notifications are generated after calling reload_down(), but before
    calling reload_up(). At this stage, the data structures accessed while
    reading the value of the "acl_region_rehash_interval" devlink parameter
    are uninitialized, resulting in a use-after-free [1].
    
    Fix by moving the registration and unregistration of the devlink
    parameter to the TCAM code where it is actually used. This means that
    the parameter is unregistered during reload_down() and then
    re-registered during reload_up(), avoiding the use-after-free between
    these two operations.
    
    Reproducer:
    
     # ip netns add test123
     # devlink dev reload pci/0000:06:00.0 netns test123
    
    [1]
    BUG: KASAN: use-after-free in mlxsw_sp_acl_tcam_vregion_rehash_intrvl_get+0xb2/0xd0
    Read of size 4 at addr ffff888162fd37d8 by task devlink/1323
    [...]
    Call Trace:
     <TASK>
     dump_stack_lvl+0x95/0xbd
     print_report+0x181/0x4a1
     kasan_report+0xdb/0x200
     mlxsw_sp_acl_tcam_vregion_rehash_intrvl_get+0xb2/0xd0
     mlxsw_sp_params_acl_region_rehash_intrvl_get+0x32/0x80
     devlink_nl_param_fill.constprop.0+0x29a/0x11e0
     devlink_param_notify.constprop.0+0xb9/0x250
     devlink_notify_unregister+0xbc/0x470
     devlink_reload+0x1aa/0x440
     devlink_nl_cmd_reload+0x559/0x11b0
     genl_family_rcv_msg_doit.isra.0+0x1f8/0x2e0
     genl_rcv_msg+0x558/0x7f0
     netlink_rcv_skb+0x170/0x440
     genl_rcv+0x2d/0x40
     netlink_unicast+0x53f/0x810
     netlink_sendmsg+0x961/0xe80
     __sys_sendto+0x2a4/0x420
     __x64_sys_sendto+0xe5/0x1c0
     do_syscall_64+0x38/0x80
     entry_SYSCALL_64_after_hwframe+0x63/0xcd
    
    Fixes: 7d7e9169 ("devlink: move devlink reload notifications back in between _down() and _up() calls")
    Signed-off-by: default avatarIdo Schimmel <idosch@nvidia.com>
    Reviewed-by: default avatarJiri Pirko <jiri@nvidia.com>
    Signed-off-by: default avatarPetr Machata <petrm@nvidia.com>
    Reviewed-by: default avatarJacob Keller <jacob.e.keller@intel.com>
    Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
    74cbc3c0
spectrum_acl.c 31.5 KB