forked from luck/tmp_suning_uos_patched
bpf: Remove recursion prevention from rcu free callback
If an element is freed via RCU then recursion into BPF instrumentation functions is not a concern. The element is already detached from the map and the RCU callback does not hold any locks on which a kprobe, perf event or tracepoint attached BPF program could deadlock. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Alexei Starovoitov <ast@kernel.org> Link: https://lore.kernel.org/bpf/20200224145643.259118710@linutronix.de
This commit is contained in:
parent
1d7bf6b7d3
commit
8a37963c7a
|
@ -706,15 +706,7 @@ static void htab_elem_free_rcu(struct rcu_head *head)
|
||||||
struct htab_elem *l = container_of(head, struct htab_elem, rcu);
|
struct htab_elem *l = container_of(head, struct htab_elem, rcu);
|
||||||
struct bpf_htab *htab = l->htab;
|
struct bpf_htab *htab = l->htab;
|
||||||
|
|
||||||
/* must increment bpf_prog_active to avoid kprobe+bpf triggering while
|
|
||||||
* we're calling kfree, otherwise deadlock is possible if kprobes
|
|
||||||
* are placed somewhere inside of slub
|
|
||||||
*/
|
|
||||||
preempt_disable();
|
|
||||||
__this_cpu_inc(bpf_prog_active);
|
|
||||||
htab_elem_free(htab, l);
|
htab_elem_free(htab, l);
|
||||||
__this_cpu_dec(bpf_prog_active);
|
|
||||||
preempt_enable();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void free_htab_elem(struct bpf_htab *htab, struct htab_elem *l)
|
static void free_htab_elem(struct bpf_htab *htab, struct htab_elem *l)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user