Re: [RFC PATCH 3/5] bpf: add BPF_PROG_ATTACH and BPF_PROG_DETACH commands
From: Eric Dumazet <hidden>
Date: 2016-08-17 16:16:04
From: Eric Dumazet <hidden>
Date: 2016-08-17 16:16:04
On Wed, 2016-08-17 at 16:00 +0200, Daniel Mack wrote:
+ progp = is_ingress ? &cgrp->bpf_ingress : &cgrp->bpf_egress; + + rcu_read_lock(); + old_prog = rcu_dereference(*progp); + rcu_assign_pointer(*progp, prog); + + if (old_prog) + bpf_prog_put(old_prog); + + rcu_read_unlock();
This is a bogus locking strategy. You do not want to use rcu_read_lock()/rcu_read_unlock() here, but appropriate writer exclusion (a mutex probably, or a spinlock) Then use rcu_dereference_protected() instead of rcu_dereference(*progp);