On 07.08.2019 6:35, Igor Lubashev wrote: > The kernel is using CAP_SYS_ADMIN instead of euid==0 to override > perf_event_paranoid check. Make perf do the same. > > Signed-off-by: Igor Lubashev <iluba...@akamai.com> > --- > tools/perf/arch/arm/util/cs-etm.c | 3 ++- > tools/perf/arch/arm64/util/arm-spe.c | 4 ++-- > tools/perf/arch/x86/util/intel-bts.c | 3 ++- > tools/perf/arch/x86/util/intel-pt.c | 2 +- > tools/perf/util/evsel.c | 2 +- > 5 files changed, 8 insertions(+), 6 deletions(-) > > diff --git a/tools/perf/arch/arm/util/cs-etm.c > b/tools/perf/arch/arm/util/cs-etm.c > index 5cb07e8cb296..b87a1ca2968f 100644 > --- a/tools/perf/arch/arm/util/cs-etm.c > +++ b/tools/perf/arch/arm/util/cs-etm.c > @@ -18,6 +18,7 @@ > #include "../../perf.h" > #include "../../util/auxtrace.h" > #include "../../util/cpumap.h" > +#include "../../util/event.h" > #include "../../util/evlist.h" > #include "../../util/evsel.h" > #include "../../util/pmu.h" > @@ -254,7 +255,7 @@ static int cs_etm_recording_options(struct > auxtrace_record *itr, > struct perf_pmu *cs_etm_pmu = ptr->cs_etm_pmu; > struct evsel *evsel, *cs_etm_evsel = NULL; > struct perf_cpu_map *cpus = evlist->core.cpus; > - bool privileged = (geteuid() == 0 || perf_event_paranoid() < 0); > + bool privileged = perf_event_paranoid_check(-1); > int err = 0; > > ptr->evlist = evlist; > diff --git a/tools/perf/arch/arm64/util/arm-spe.c > b/tools/perf/arch/arm64/util/arm-spe.c > index 00915b8fd05b..200bc973371b 100644 > --- a/tools/perf/arch/arm64/util/arm-spe.c > +++ b/tools/perf/arch/arm64/util/arm-spe.c > @@ -12,6 +12,7 @@ > #include <time.h> > > #include "../../util/cpumap.h" > +#include "../../util/event.h" > #include "../../util/evsel.h" > #include "../../util/evlist.h" > #include "../../util/session.h" > @@ -65,8 +66,7 @@ static int arm_spe_recording_options(struct auxtrace_record > *itr, > struct arm_spe_recording *sper = > container_of(itr, struct arm_spe_recording, itr); > struct perf_pmu *arm_spe_pmu = sper->arm_spe_pmu; > - struct evsel *evsel, *arm_spe_evsel = NULL;
Makes sense to double check if it compiles with this change. Regards, Alexey > - bool privileged = geteuid() == 0 || perf_event_paranoid() < 0; > + bool privileged = perf_event_paranoid_check(-1); > struct evsel *tracking_evsel; > int err; > > diff --git a/tools/perf/arch/x86/util/intel-bts.c > b/tools/perf/arch/x86/util/intel-bts.c > index 7b23318ebd7b..56a76142e9fd 100644 > --- a/tools/perf/arch/x86/util/intel-bts.c > +++ b/tools/perf/arch/x86/util/intel-bts.c > @@ -12,6 +12,7 @@ > #include <linux/zalloc.h> > > #include "../../util/cpumap.h" > +#include "../../util/event.h" > #include "../../util/evsel.h" > #include "../../util/evlist.h" > #include "../../util/session.h" > @@ -107,7 +108,7 @@ static int intel_bts_recording_options(struct > auxtrace_record *itr, > struct perf_pmu *intel_bts_pmu = btsr->intel_bts_pmu; > struct evsel *evsel, *intel_bts_evsel = NULL; > const struct perf_cpu_map *cpus = evlist->core.cpus; > - bool privileged = geteuid() == 0 || perf_event_paranoid() < 0; > + bool privileged = perf_event_paranoid_check(-1); > > btsr->evlist = evlist; > btsr->snapshot_mode = opts->auxtrace_snapshot_mode; > diff --git a/tools/perf/arch/x86/util/intel-pt.c > b/tools/perf/arch/x86/util/intel-pt.c > index 218a4e694618..43d5088ee824 100644 > --- a/tools/perf/arch/x86/util/intel-pt.c > +++ b/tools/perf/arch/x86/util/intel-pt.c > @@ -558,7 +558,7 @@ static int intel_pt_recording_options(struct > auxtrace_record *itr, > bool have_timing_info, need_immediate = false; > struct evsel *evsel, *intel_pt_evsel = NULL; > const struct perf_cpu_map *cpus = evlist->core.cpus; > - bool privileged = geteuid() == 0 || perf_event_paranoid() < 0; > + bool privileged = perf_event_paranoid_check(-1); > u64 tsc_bit; > int err; > > diff --git a/tools/perf/util/evsel.c b/tools/perf/util/evsel.c > index 64bc32ed6dfa..eafc134bf17c 100644 > --- a/tools/perf/util/evsel.c > +++ b/tools/perf/util/evsel.c > @@ -279,7 +279,7 @@ struct evsel *perf_evsel__new_idx(struct perf_event_attr > *attr, int idx) > > static bool perf_event_can_profile_kernel(void) > { > - return geteuid() == 0 || perf_event_paranoid() == -1; > + return perf_event_paranoid_check(-1); > } > > struct evsel *perf_evsel__new_cycles(bool precise) >