Add an expected attach type for classic uprobe programs. Reject attaching these programs to non-uprobe perf events and disable the private stack for them. Signed-off-by: Jiri Olsa --- include/uapi/linux/bpf.h | 1 + kernel/bpf/verifier.c | 3 ++- kernel/events/core.c | 3 +++ tools/include/uapi/linux/bpf.h | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/include/uapi/linux/bpf.h b/include/uapi/linux/bpf.h index 62de0919db72..3c8a75b4c744 100644 --- a/include/uapi/linux/bpf.h +++ b/include/uapi/linux/bpf.h @@ -1206,6 +1206,7 @@ enum bpf_attach_type { BPF_TRACE_FENTRY_MULTI, BPF_TRACE_FEXIT_MULTI, BPF_TRACE_FSESSION_MULTI, + BPF_TRACE_UPROBE, __MAX_BPF_ATTACH_TYPE }; diff --git a/kernel/bpf/verifier.c b/kernel/bpf/verifier.c index a9c6a4b8eecc..7c941e009a33 100644 --- a/kernel/bpf/verifier.c +++ b/kernel/bpf/verifier.c @@ -5707,7 +5707,8 @@ static enum priv_stack_mode bpf_enable_priv_stack(struct bpf_prog *prog) switch (prog->type) { case BPF_PROG_TYPE_KPROBE: /* Disable private stack for uprobe programs. */ - if (prog->expected_attach_type == BPF_TRACE_UPROBE_MULTI || + if (prog->expected_attach_type == BPF_TRACE_UPROBE || + prog->expected_attach_type == BPF_TRACE_UPROBE_MULTI || prog->expected_attach_type == BPF_TRACE_UPROBE_SESSION) return NO_PRIV_STACK; fallthrough; diff --git a/kernel/events/core.c b/kernel/events/core.c index 457d75ea7142..016d479467ed 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -11835,6 +11835,9 @@ static int __perf_event_set_bpf_prog(struct perf_event *event, (is_syscall_tp && prog->type != BPF_PROG_TYPE_TRACEPOINT)) return -EINVAL; + if (prog->expected_attach_type == BPF_TRACE_UPROBE && !is_uprobe) + return -EINVAL; + if (prog->type == BPF_PROG_TYPE_KPROBE && prog->sleepable && !is_uprobe) /* only uprobe programs are allowed to be sleepable */ return -EINVAL; diff --git a/tools/include/uapi/linux/bpf.h b/tools/include/uapi/linux/bpf.h index 62de0919db72..3c8a75b4c744 100644 --- a/tools/include/uapi/linux/bpf.h +++ b/tools/include/uapi/linux/bpf.h @@ -1206,6 +1206,7 @@ enum bpf_attach_type { BPF_TRACE_FENTRY_MULTI, BPF_TRACE_FEXIT_MULTI, BPF_TRACE_FSESSION_MULTI, + BPF_TRACE_UPROBE, __MAX_BPF_ATTACH_TYPE }; -- 2.43.0