Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1484176 > unrolled thread
| Started by | Alexander Shishkin <alexander.shishkin@linux.intel.com> |
|---|---|
| First post | 2016-09-15 15:40 +0200 |
| Last post | 2016-09-15 15:40 +0200 |
| Articles | 2 — 1 participant |
Back to article view | Back to linux.kernel
[PATCH 0/3] perf/x86/intel/pt: Address filtering fixes for perf/urgent Alexander Shishkin <alexander.shishkin@linux.intel.com> - 2016-09-15 15:40 +0200
[PATCH 1/3] perf/x86/intel/pt: Fix an off-by-one in address filter configuration Alexander Shishkin <alexander.shishkin@linux.intel.com> - 2016-09-15 15:40 +0200
| From | Alexander Shishkin <alexander.shishkin@linux.intel.com> |
|---|---|
| Date | 2016-09-15 15:40 +0200 |
| Subject | [PATCH 0/3] perf/x86/intel/pt: Address filtering fixes for perf/urgent |
| Message-ID | <shF3s-7Ca-31@gated-at.bofh.it> |
Hi, Hoping that it's not too late, here are fixes for issues that Adrian found. All three are good for -stable afaict. Two of the bugs result in a #GP and one in a misconfigured filter. 2/3 can be moved into the PT driver as well, but I decided that others may benefit from it at least theoretically. Alexander Shishkin (3): perf/x86/intel/pt: Fix an off-by-one in address filter configuration perf/x86: Tighten up the kernel_ip() check perf/x86/intel/pt: Do validate the size of a kernel address filter arch/x86/events/intel/pt.c | 13 +++++++++---- arch/x86/events/perf_event.h | 2 +- 2 files changed, 10 insertions(+), 5 deletions(-) -- 2.9.3
[toc] | [next] | [standalone]
| From | Alexander Shishkin <alexander.shishkin@linux.intel.com> |
|---|---|
| Date | 2016-09-15 15:40 +0200 |
| Subject | [PATCH 1/3] perf/x86/intel/pt: Fix an off-by-one in address filter configuration |
| Message-ID | <shF3s-7Ca-35@gated-at.bofh.it> |
| In reply to | #1484176 |
PT address filter configuration requires that a range is specified by
its first and last address, but at the moment we're obtaining the end
of the range by adding user specified size to its start, which is off
by one from what it actually needs to be.
Fix this and make sure that zero-sized filters don't pass the filter
validation.
Cc: stable@vger.kernel.org # 4.7
Reported-by: Adrian Hunter <adrian.hunter@intel.com>
Signed-off-by: Alexander Shishkin <alexander.shishkin@linux.intel.com>
---
arch/x86/events/intel/pt.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/x86/events/intel/pt.c b/arch/x86/events/intel/pt.c
index 04bb5fb5a8..5ec0100e3f 100644
--- a/arch/x86/events/intel/pt.c
+++ b/arch/x86/events/intel/pt.c
@@ -1081,7 +1081,7 @@ static int pt_event_addr_filters_validate(struct list_head *filters)
list_for_each_entry(filter, filters, entry) {
/* PT doesn't support single address triggers */
- if (!filter->range)
+ if (!filter->range || !filter->size)
return -EOPNOTSUPP;
if (!filter->inode && !kernel_ip(filter->offset))
@@ -1111,7 +1111,7 @@ static void pt_event_addr_filters_sync(struct perf_event *event)
} else {
/* apply the offset */
msr_a = filter->offset + offs[range];
- msr_b = filter->size + msr_a;
+ msr_b = filter->size + msr_a - 1;
}
filters->filter[range].msr_a = msr_a;
--
2.9.3
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web