diff --git a/net/sched/act_mirred.c b/net/sched/act_mirred.c
index cd712e4e8998c17e2a118ab234c7dd89230744d4..17cc6bd4c57c3a6f12786c3d1109c6e48af185dd 100644
--- a/net/sched/act_mirred.c
+++ b/net/sched/act_mirred.c
@@ -159,12 +159,15 @@ static int tcf_mirred_init(struct net *net, struct nlattr *nla,
 		tcf_idr_release(*a, bind);
 		return -EEXIST;
 	}
+
+	m = to_mirred(*a);
+	if (ret == ACT_P_CREATED)
+		INIT_LIST_HEAD(&m->tcfm_list);
+
 	err = tcf_action_check_ctrlact(parm->action, tp, &goto_ch, extack);
 	if (err < 0)
 		goto release_idr;
 
-	m = to_mirred(*a);
-
 	spin_lock_bh(&m->tcf_lock);
 
 	if (parm->ifindex) {