aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/trace/bpf_trace.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/trace/bpf_trace.c')
-rw-r--r--kernel/trace/bpf_trace.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/kernel/trace/bpf_trace.c b/kernel/trace/bpf_trace.c
index 27d1f4ffa3de..0ce99c379c30 100644
--- a/kernel/trace/bpf_trace.c
+++ b/kernel/trace/bpf_trace.c
@@ -759,6 +759,8 @@ const struct bpf_prog_ops perf_event_prog_ops = {
759 759
760static DEFINE_MUTEX(bpf_event_mutex); 760static DEFINE_MUTEX(bpf_event_mutex);
761 761
762#define BPF_TRACE_MAX_PROGS 64
763
762int perf_event_attach_bpf_prog(struct perf_event *event, 764int perf_event_attach_bpf_prog(struct perf_event *event,
763 struct bpf_prog *prog) 765 struct bpf_prog *prog)
764{ 766{
@@ -772,6 +774,12 @@ int perf_event_attach_bpf_prog(struct perf_event *event,
772 goto unlock; 774 goto unlock;
773 775
774 old_array = event->tp_event->prog_array; 776 old_array = event->tp_event->prog_array;
777 if (old_array &&
778 bpf_prog_array_length(old_array) >= BPF_TRACE_MAX_PROGS) {
779 ret = -E2BIG;
780 goto unlock;
781 }
782
775 ret = bpf_prog_array_copy(old_array, NULL, prog, &new_array); 783 ret = bpf_prog_array_copy(old_array, NULL, prog, &new_array);
776 if (ret < 0) 784 if (ret < 0)
777 goto unlock; 785 goto unlock;