• Nir Dotan's avatar
    mlxsw: core_acl_flex_actions: Remove redundant resource destruction · dda0a3a3
    Nir Dotan authored
    Some ACL actions require the allocation of a separate resource
    prior to applying the action itself. When facing an error condition
    during the setup phase of the action, resource should be destroyed.
    For such actions the destruction was done twice which is dangerous
    and lead to a potential crash.
    The destruction took place first upon error on action setup phase
    and then as the rule was destroyed.
    
    The following sequence generated a crash:
    
     # tc qdisc add dev swp49 ingress
     # tc filter add dev swp49 parent ffff: \
       protocol ip chain 100 pref 10 \
       flower skip_sw dst_ip 192.168.101.1 action drop
     # tc filter add dev swp49 parent ffff: \
       protocol ip pref 10 \
       flower skip_sw dst_ip 192.168.101.1 action goto chain 100 \
       action mirred egress mirror dev swp4
    
    Therefore add mlxsw_afa_resource_del() as a complement of
    mlxsw_afa_resource_add() to add symmetry to resource_list membership
    handling. Call this from mlxsw_afa_fwd_entry_ref_destroy() to make the
    _fwd_entry_ref_create() and _fwd_entry_ref_destroy() pair of calls a
    NOP.
    
    Fixes: 140ce421 ("mlxsw: core: Convert fwd_entry_ref list to be generic per-block resource list")
    Signed-off-by: default avatarNir Dotan <nird@mellanox.com>
    Reviewed-by: default avatarJiri Pirko <jiri@mellanox.com>
    Signed-off-by: default avatarIdo Schimmel <idosch@mellanox.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    dda0a3a3
core_acl_flex_actions.c 33 KB