perf: x86: Fix GPF with bad events
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 26 Oct 2017 18:29:43 +0000 (14:29 -0400)
committerBarret Rhoden <brho@cs.berkeley.edu>
Thu, 26 Oct 2017 18:33:29 +0000 (14:33 -0400)
commit587318b8dfe68b3d41049b0b55dbce1c5618e78b
tree1f5108cec591f79b4b4d4643dedf3cb404ab99e6
parentc6ea985995cd943e497b222a10ce0f62d2ec0ef2
perf: x86: Fix GPF with bad events

Userspace could give us a bad 'event' parameter with reserved bits set.
That would blow up write_msr() with a GPF.

I noticed this by looking at the code, but it turns out you can recreate
the bug in qemu by trying to use 'anythread' with a non-fixed counter.
e.g.:

perf stat -e TLB_FLUSH:t hello

will die.  Using -e cycles won't do it, since fixed counters were checking
the 'any thread' bit.  Hacking up perf and writing bits to the upper half
of the event / MSR would also trigger the GPF.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/arch/x86/perfmon.c