net: sched: cls_matchall: cleanup flow_action before deallocating
authorVlad Buslov <vladbu@mellanox.com>
Thu, 29 Aug 2019 16:15:16 +0000 (19:15 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 30 Aug 2019 22:12:05 +0000 (15:12 -0700)
Recent rtnl lock removal patch changed flow_action infra to require proper
cleanup besides simple memory deallocation. However, matchall classifier
was not updated to call tc_cleanup_flow_action(). Add proper cleanup to
mall_replace_hw_filter() and mall_reoffload().

Fixes: 5a6ff4b13d59 ("net: sched: take reference to action dev before calling offloads")
Reported-by: Ido Schimmel <idosch@mellanox.com>
Tested-by: Ido Schimmel <idosch@mellanox.com>
Signed-off-by: Vlad Buslov <vladbu@mellanox.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_matchall.c

index 3266f25011ccaa29f5ddbc18a47f4df0d644bb4b..7fc2eb62aa982651b11ab07f575fdfdaf63a11d3 100644 (file)
@@ -111,6 +111,7 @@ static int mall_replace_hw_filter(struct tcf_proto *tp,
 
        err = tc_setup_cb_add(block, tp, TC_SETUP_CLSMATCHALL, &cls_mall,
                              skip_sw, &head->flags, &head->in_hw_count, true);
+       tc_cleanup_flow_action(&cls_mall.rule->action);
        kfree(cls_mall.rule);
 
        if (err) {
@@ -313,6 +314,7 @@ static int mall_reoffload(struct tcf_proto *tp, bool add, flow_setup_cb_t *cb,
        err = tc_setup_cb_reoffload(block, tp, add, cb, TC_SETUP_CLSMATCHALL,
                                    &cls_mall, cb_priv, &head->flags,
                                    &head->in_hw_count);
+       tc_cleanup_flow_action(&cls_mall.rule->action);
        kfree(cls_mall.rule);
 
        if (err)