--- /dev/null
+From b057df24a7536cce6c372efe9d0e3d1558afedf4 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ignacy=20Gaw=C4=99dzki?=
+ <ignacy.gawedzki@green-communications.fr>
+Date: Tue, 3 Feb 2015 19:05:18 +0100
+Subject: cls_api.c: Fix dumping of non-existing actions' stats.
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+From: Ignacy Gawędzki <ignacy.gawedzki@green-communications.fr>
+
+commit b057df24a7536cce6c372efe9d0e3d1558afedf4 upstream.
+
+In tcf_exts_dump_stats(), ensure that exts->actions is not empty before
+accessing the first element of that list and calling tcf_action_copy_stats()
+on it. This fixes some random segvs when adding filters of type "basic" with
+no particular action.
+
+This also fixes the dumping of those "no-action" filters, which more often
+than not made calls to tcf_action_copy_stats() fail and consequently netlink
+attributes added by the caller to be removed by a call to nla_nest_cancel().
+
+Fixes: 33be62715991 ("net_sched: act: use standard struct list_head")
+Signed-off-by: Ignacy Gawędzki <ignacy.gawedzki@green-communications.fr>
+Acked-by: Cong Wang <cwang@twopensource.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Cc: J Pommnitz <jpo234@outlook.de>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ net/sched/cls_api.c | 7 ++++---
+ 1 file changed, 4 insertions(+), 3 deletions(-)
+
+--- a/net/sched/cls_api.c
++++ b/net/sched/cls_api.c
+@@ -563,8 +563,9 @@ void tcf_exts_change(struct tcf_proto *t
+ }
+ EXPORT_SYMBOL(tcf_exts_change);
+
+-#define tcf_exts_first_act(ext) \
+- list_first_entry(&(exts)->actions, struct tc_action, list)
++#define tcf_exts_first_act(ext) \
++ list_first_entry_or_null(&(exts)->actions, \
++ struct tc_action, list)
+
+ int tcf_exts_dump(struct sk_buff *skb, struct tcf_exts *exts)
+ {
+@@ -610,7 +611,7 @@ int tcf_exts_dump_stats(struct sk_buff *
+ {
+ #ifdef CONFIG_NET_CLS_ACT
+ struct tc_action *a = tcf_exts_first_act(exts);
+- if (tcf_action_copy_stats(skb, a, 1) < 0)
++ if (a != NULL && tcf_action_copy_stats(skb, a, 1) < 0)
+ return -1;
+ #endif
+ return 0;