]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
net: sched: cls_u32: rcu can not be last node
authorJohn Fastabend <john.fastabend@gmail.com>
Wed, 17 Sep 2014 18:11:46 +0000 (11:11 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 19 Sep 2014 21:05:45 +0000 (17:05 -0400)
tc_u32_sel 'sel' in tc_u_knode expects to be the last element in the
structure and pads the structure with tc_u32_key fields for each key.

 kzalloc(sizeof(*n) + s->nkeys*sizeof(struct tc_u32_key), GFP_KERNEL)

CC: Eric Dumazet <edumazet@google.com>
Signed-off-by: John Fastabend <john.r.fastabend@intel.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_u32.c

index eceeb0456d260e4083b7645245fe9f8f764bda5e..730edb29d43b53f364117684cefe5e499121508f 100644 (file)
@@ -64,8 +64,11 @@ struct tc_u_knode {
        u32 __percpu            *pcpu_success;
 #endif
        struct tcf_proto        *tp;
-       struct tc_u32_sel       sel;
        struct rcu_head         rcu;
+       /* The 'sel' field MUST be the last field in structure to allow for
+        * tc_u32_keys allocated at end of structure.
+        */
+       struct tc_u32_sel       sel;
 };
 
 struct tc_u_hnode {