bpf, trace: check event type in bpf_perf_event_read
authorAlexei Starovoitov <ast@fb.com>
Thu, 16 Jun 2016 01:25:39 +0000 (18:25 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 16 Jun 2016 06:37:54 +0000 (23:37 -0700)
similar to bpf_perf_event_output() the bpf_perf_event_read() helper
needs to check the type of the perf_event before reading the counter.

Fixes: a43eec304259 ("bpf: introduce bpf_perf_event_output() helper")
Reported-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Daniel Borkmann <daniel@iogearbox.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
kernel/trace/bpf_trace.c

index e7af6cb9d5cf580b402e8211e493865f96929e9c..26f603da7e26867fc47835a8fcd3eca4121e2d86 100644 (file)
@@ -209,6 +209,10 @@ static u64 bpf_perf_event_read(u64 r1, u64 index, u64 r3, u64 r4, u64 r5)
            event->pmu->count)
                return -EINVAL;
 
+       if (unlikely(event->attr.type != PERF_TYPE_HARDWARE &&
+                    event->attr.type != PERF_TYPE_RAW))
+               return -EINVAL;
+
        /*
         * we don't know if the function is run successfully by the
         * return value. It can be judged in other places, such as