提交 7cc23cd6 编写于 作者: P Peter Zijlstra 提交者: Ingo Molnar

perf/x86/intel/lbr: Demand proper privileges for PERF_SAMPLE_BRANCH_KERNEL

We should always have proper privileges when requesting kernel
data.
Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
Cc: <stable@kernel.org>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: eranian@google.com
Link: http://lkml.kernel.org/r/20130503121256.230745028@chello.nl
[ Fix build error reported by fengguang.wu@intel.com, propagate error code back. ]
Signed-off-by: NIngo Molnar <mingo@kernel.org>
Link: http://lkml.kernel.org/n/tip-v0x9ky3ahzr6nm3c6ilwrili@git.kernel.org
上级 6e15eb3b
...@@ -310,7 +310,7 @@ void intel_pmu_lbr_read(void) ...@@ -310,7 +310,7 @@ void intel_pmu_lbr_read(void)
* - in case there is no HW filter * - in case there is no HW filter
* - in case the HW filter has errata or limitations * - in case the HW filter has errata or limitations
*/ */
static void intel_pmu_setup_sw_lbr_filter(struct perf_event *event) static int intel_pmu_setup_sw_lbr_filter(struct perf_event *event)
{ {
u64 br_type = event->attr.branch_sample_type; u64 br_type = event->attr.branch_sample_type;
int mask = 0; int mask = 0;
...@@ -318,8 +318,11 @@ static void intel_pmu_setup_sw_lbr_filter(struct perf_event *event) ...@@ -318,8 +318,11 @@ static void intel_pmu_setup_sw_lbr_filter(struct perf_event *event)
if (br_type & PERF_SAMPLE_BRANCH_USER) if (br_type & PERF_SAMPLE_BRANCH_USER)
mask |= X86_BR_USER; mask |= X86_BR_USER;
if (br_type & PERF_SAMPLE_BRANCH_KERNEL) if (br_type & PERF_SAMPLE_BRANCH_KERNEL) {
if (perf_paranoid_kernel() && !capable(CAP_SYS_ADMIN))
return -EACCES;
mask |= X86_BR_KERNEL; mask |= X86_BR_KERNEL;
}
/* we ignore BRANCH_HV here */ /* we ignore BRANCH_HV here */
...@@ -339,6 +342,8 @@ static void intel_pmu_setup_sw_lbr_filter(struct perf_event *event) ...@@ -339,6 +342,8 @@ static void intel_pmu_setup_sw_lbr_filter(struct perf_event *event)
* be used by fixup code for some CPU * be used by fixup code for some CPU
*/ */
event->hw.branch_reg.reg = mask; event->hw.branch_reg.reg = mask;
return 0;
} }
/* /*
...@@ -386,7 +391,9 @@ int intel_pmu_setup_lbr_filter(struct perf_event *event) ...@@ -386,7 +391,9 @@ int intel_pmu_setup_lbr_filter(struct perf_event *event)
/* /*
* setup SW LBR filter * setup SW LBR filter
*/ */
intel_pmu_setup_sw_lbr_filter(event); ret = intel_pmu_setup_sw_lbr_filter(event);
if (ret)
return ret;
/* /*
* setup HW LBR filter, if any * setup HW LBR filter, if any
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册