Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1baf2360 authored by Thomas Gleixner's avatar Thomas Gleixner Committed by Greg Kroah-Hartman
Browse files

bpf: Remove recursion prevention from rcu free callback



[ Upstream commit 8a37963c7ac9ecb7f86f8ebda020e3f8d6d7b8a0 ]

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: default avatarThomas Gleixner <tglx@linutronix.de>
Signed-off-by: default avatarAlexei Starovoitov <ast@kernel.org>
Link: https://lore.kernel.org/bpf/20200224145643.259118710@linutronix.de


Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 03dda956
Loading
Loading
Loading
Loading
+0 −8
Original line number Diff line number Diff line
@@ -667,15 +667,7 @@ static void htab_elem_free_rcu(struct rcu_head *head)
	struct htab_elem *l = container_of(head, struct htab_elem, rcu);
	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);
	__this_cpu_dec(bpf_prog_active);
	preempt_enable();
}

static void htab_put_fd_value(struct bpf_htab *htab, struct htab_elem *l)