net_sched: cls_bpf: remove faulty use of list_for_each_entry_rcu
authorJiri Pirko <jiri@resnulli.us>
Tue, 2 Dec 2014 17:00:33 +0000 (18:00 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 9 Dec 2014 01:53:40 +0000 (20:53 -0500)
rcu variant is not correct here. The code is called by updater (rtnl
lock is held), not by reader (no rcu_read_lock is held).

Signed-off-by: Jiri Pirko <jiri@resnulli.us>
ACKed-by: Jamal Hadi Salim <jhs@mojatatu.com>
Acked-by: Daniel Borkmann <dborkman@redhat.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/sched/cls_bpf.c

index cbfaf6f8feb3b5d0b8d2724fb3c0aeed67645afc..d0de979c04a3644f8208e57a165339acf9deebf1 100644 (file)
@@ -141,7 +141,7 @@ static unsigned long cls_bpf_get(struct tcf_proto *tp, u32 handle)
        if (head == NULL)
                return 0UL;
 
-       list_for_each_entry_rcu(prog, &head->plist, link) {
+       list_for_each_entry(prog, &head->plist, link) {
                if (prog->handle == handle) {
                        ret = (unsigned long) prog;
                        break;
@@ -337,7 +337,7 @@ static void cls_bpf_walk(struct tcf_proto *tp, struct tcf_walker *arg)
        struct cls_bpf_head *head = rtnl_dereference(tp->root);
        struct cls_bpf_prog *prog;
 
-       list_for_each_entry_rcu(prog, &head->plist, link) {
+       list_for_each_entry(prog, &head->plist, link) {
                if (arg->count < arg->skip)
                        goto skip;
                if (arg->fn(tp, (unsigned long) prog, arg) < 0) {