Re: [PATCH V2 3/3] perf/x86/intel/uncore: Validate MMIO address before accessing

From: Liang, Kan
Date: Thu May 28 2020 - 09:46:48 EST




On 5/28/2020 9:30 AM, Andi Kleen wrote:
On Thu, May 28, 2020 at 06:15:27AM -0700, kan.liang@xxxxxxxxxxxxxxx wrote:
From: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>

An oops will be triggered, if perf tries to access an invalid address
which exceeds the mapped area.

Check the address before the actual access to MMIO sapce of an uncore
unit.

Ah ok the range check is here


Suggested-by: David Laight <David.Laight@xxxxxxxxxx>
Signed-off-by: Kan Liang <kan.liang@xxxxxxxxxxxxxxx>
---
arch/x86/events/intel/uncore.c | 3 +++
arch/x86/events/intel/uncore.h | 12 ++++++++++++
arch/x86/events/intel/uncore_snbep.c | 6 ++++++
3 files changed, 21 insertions(+)

diff --git a/arch/x86/events/intel/uncore.c b/arch/x86/events/intel/uncore.c
index cf76d66..284f8e7 100644
--- a/arch/x86/events/intel/uncore.c
+++ b/arch/x86/events/intel/uncore.c
@@ -132,6 +132,9 @@ u64 uncore_mmio_read_counter(struct intel_uncore_box *box,
if (!box->io_addr)
return 0;
+ if (!is_valid_mmio_offset(box, event->hw.event_base))
+ return 0;

Is this function used somewhere else? Otherwise it should be added
together with its users.


Yes, it's generic function. Current MMIO uncore units invoke it to read counter.

Thanks,
Kan