• Roi Dayan's avatar
    net/mlx5e: CT, Fix multiple allocations and memleak of mod acts · 806401c2
    Roi Dayan authored
    CT clear action offload adds additional mod hdr actions to the
    flow's original mod actions in order to clear the registers which
    hold ct_state.
    When such flow also includes encap action, a neigh update event
    can cause the driver to unoffload the flow and then reoffload it.
    
    Each time this happens, the ct clear handling adds that same set
    of mod hdr actions to reset ct_state until the max of mod hdr
    actions is reached.
    
    Also the driver never releases the allocated mod hdr actions and
    causing a memleak.
    
    Fix above two issues by moving CT clear mod acts allocation
    into the parsing actions phase and only use it when offloading the rule.
    The release of mod acts will be done in the normal flow_put().
    
     backtrace:
        [<000000007316e2f3>] krealloc+0x83/0xd0
        [<00000000ef157de1>] mlx5e_mod_hdr_alloc+0x147/0x300 [mlx5_core]
        [<00000000970ce4ae>] mlx5e_tc_match_to_reg_set_and_get_id+0xd7/0x240 [mlx5_core]
        [<0000000067c5fa17>] mlx5e_tc_match_to_reg_set+0xa/0x20 [mlx5_core]
        [<00000000d032eb98>] mlx5_tc_ct_entry_set_registers.isra.0+0x36/0xc0 [mlx5_core]
        [<00000000fd23b869>] mlx5_tc_ct_flow_offload+0x272/0x1f10 [mlx5_core]
        [<000000004fc24acc>] mlx5e_tc_offload_fdb_rules.part.0+0x150/0x620 [mlx5_core]
        [<00000000dc741c17>] mlx5e_tc_encap_flows_add+0x489/0x690 [mlx5_core]
        [<00000000e92e49d7>] mlx5e_rep_update_flows+0x6e4/0x9b0 [mlx5_core]
        [<00000000f60f5602>] mlx5e_rep_neigh_update+0x39a/0x5d0 [mlx5_core]
    
    Fixes: 1ef3018f ("net/mlx5e: CT: Support clear action")
    Signed-off-by: default avatarRoi Dayan <roid@nvidia.com>
    Reviewed-by: default avatarPaul Blakey <paulb@nvidia.com>
    Reviewed-by: default avatarMaor Dickman <maord@nvidia.com>
    Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
    806401c2
tc_ct.c 58.5 KB