mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-05 03:44:03 +08:00
bpf: Add support for bpf iterator programs to use sleepable helpers
This patch allows bpf iterator programs to use sleepable helpers by changing `bpf_iter_run_prog` to use the appropriate synchronization. With sleepable bpf iterator programs, we can no longer use `rcu_read_lock()` and must use `rcu_read_lock_trace()` instead to protect the bpf program. Signed-off-by: Kenny Yu <kennyyu@fb.com> Acked-by: Andrii Nakryiko <andrii@kernel.org> Link: https://lore.kernel.org/r/20220124185403.468466-2-kennyyu@fb.com Signed-off-by: Alexei Starovoitov <ast@kernel.org>
This commit is contained in:
parent
caaba96131
commit
b77fb25dcb
@ -5,6 +5,7 @@
|
||||
#include <linux/anon_inodes.h>
|
||||
#include <linux/filter.h>
|
||||
#include <linux/bpf.h>
|
||||
#include <linux/rcupdate_trace.h>
|
||||
|
||||
struct bpf_iter_target_info {
|
||||
struct list_head list;
|
||||
@ -684,11 +685,20 @@ int bpf_iter_run_prog(struct bpf_prog *prog, void *ctx)
|
||||
{
|
||||
int ret;
|
||||
|
||||
rcu_read_lock();
|
||||
migrate_disable();
|
||||
ret = bpf_prog_run(prog, ctx);
|
||||
migrate_enable();
|
||||
rcu_read_unlock();
|
||||
if (prog->aux->sleepable) {
|
||||
rcu_read_lock_trace();
|
||||
migrate_disable();
|
||||
might_fault();
|
||||
ret = bpf_prog_run(prog, ctx);
|
||||
migrate_enable();
|
||||
rcu_read_unlock_trace();
|
||||
} else {
|
||||
rcu_read_lock();
|
||||
migrate_disable();
|
||||
ret = bpf_prog_run(prog, ctx);
|
||||
migrate_enable();
|
||||
rcu_read_unlock();
|
||||
}
|
||||
|
||||
/* bpf program can only return 0 or 1:
|
||||
* 0 : okay
|
||||
|
Loading…
Reference in New Issue
Block a user