summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2015-10-19 20:20:19 +0200
committerJozsef Kadlecsik <kadlec@blackhole.kfki.hu>2015-10-19 20:20:19 +0200
commit4ed4c5f9f3f5cf007f9d2f168d310e83fb16408a (patch)
tree4b40dd72eb604a052f1e901293854f5da2b45781
parent095bd886850f3f0c6fa98f2a8d2433f9240b37f0 (diff)
Fix detecting 'struct net' in 'struct tcf_ematch'
Nikolay Borisov reported that the detection is broken. Fix checking in the right sctructure and wrap the call to dev_get_by_index_rcu() too.
-rw-r--r--configure.ac2
-rw-r--r--kernel/net/sched/em_ipset.c4
2 files changed, 5 insertions, 1 deletions
diff --git a/configure.ac b/configure.ac
index 91567da..8829403 100644
--- a/configure.ac
+++ b/configure.ac
@@ -367,7 +367,7 @@ fi
AC_MSG_CHECKING([kernel source for struct net in struct tcf_ematch])
if test -f $ksourcedir/include/net/pkt_cls.h && \
- $AWK '/^struct tcf_ematch_ops / {for(i=1; i<=7; i++) {getline; print}}' $ksourcedir/include/net/pkt_cls.h | \
+ $AWK '/^struct tcf_ematch / {for(i=1; i<=7; i++) {getline; print}}' $ksourcedir/include/net/pkt_cls.h | \
$GREP -q 'struct net'; then
AC_MSG_RESULT(yes)
AC_SUBST(HAVE_TCF_EMATCH_STRUCT_NET, define)
diff --git a/kernel/net/sched/em_ipset.c b/kernel/net/sched/em_ipset.c
index 31a0bd8..bc1a2f1 100644
--- a/kernel/net/sched/em_ipset.c
+++ b/kernel/net/sched/em_ipset.c
@@ -113,7 +113,11 @@ static int em_ipset_match(struct sk_buff *skb, struct tcf_ematch *em,
rcu_read_lock();
if (skb->skb_iif)
+#ifdef HAVE_TCF_EMATCH_STRUCT_NET
indev = dev_get_by_index_rcu(em->net, skb->skb_iif);
+#else
+ indev = dev_get_by_index_rcu(dev_net(dev), skb->skb_iif);
+#endif
acpar.in = indev ? indev : dev;
acpar.out = dev;