Skip to contentSkip to conversation

Patch "bpf, perf: delay release of BPF prog after grace period" has been added to the 4.6-stable tree

PATCH [email protected] 1 participant 1 message Jul 6, 2016

Subsystems (4)
lore
Share & tools
lore

[email protected]

author maintainer Applied
#0 lore raw

This is a note to let you know that I've just added the patch titled

bpf, perf: delay release of BPF prog after grace period

to the 4.6-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
bpf-perf-delay-release-of-bpf-prog-after-grace-period.patch
and it can be found in the queue-4.6 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.

Quoted 1 line

From foo@baz Wed Jul 6 16:50:56 PDT 2016

From: Daniel Borkmann <[email protected]>
Date: Mon, 27 Jun 2016 21:38:11 +0200
Subject: bpf, perf: delay release of BPF prog after grace period

From: Daniel Borkmann <[email protected]>

[ Upstream commit ceb56070359b7329b5678b5d95a376fcb24767be ]

Commit dead9f29ddcc ("perf: Fix race in BPF program unregister") moved destruction of BPF program from free_event_rcu() callback to __free_event(), which is problematic if used with tail calls: if prog A is attached as trace event directly, but at the same time present in a tail call map used by another trace event program elsewhere, then we need to delay destruction via RCU grace period since it can still be in use by the program doing the tail call (the prog first needs to be dropped from the tail call map, then trace event with prog A attached destroyed, so we get immediate destruction).

Fixes dead9f29ddcc ("perf: Fix race in BPF program unregister")
Cc Jann Horn <[email protected]>
---
 include/linux/bpf.h  |    4 ++++
 kernel/events/core.c |    2 +-
 2 files changed, 5 insertions(+), 1 deletion(-)
include/linux/bpf.h +4 -0
@@ -229,6 +229,10 @@ static inline struct bpf_prog *bpf_prog_
 static inline void bpf_prog_put(struct bpf_prog *prog)
 {
 }
+
+static inline void bpf_prog_put_rcu(struct bpf_prog *prog)
+{
+}
 #endif /* CONFIG_BPF_SYSCALL */
 
 /* verifier prototypes for helper functions called from eBPF programs */
kernel/events/core.c +1 -1
@@ -7143,7 +7143,7 @@ static void perf_event_free_bpf_prog(str
 	prog = event->tp_event->prog;
 	if (prog) {
 		event->tp_event->prog = NULL;
-		bpf_prog_put(prog);
+		bpf_prog_put_rcu(prog);
 	}
 }
 

Patches currently in stable-queue which might be from [email protected] are

queue-4.6/bpf-perf-delay-release-of-bpf-prog-after-grace-period.patch