Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp6808990imm; Wed, 27 Jun 2018 13:53:05 -0700 (PDT) X-Google-Smtp-Source: AAOMgpcJG0Jd2S22SXDfEc1ed28oIXshQrppJxg+3chBdW5EA3JAViWvSeqsqrOK18PM17KY8nVB X-Received: by 2002:a62:51c4:: with SMTP id f187-v6mr7435314pfb.88.1530132785636; Wed, 27 Jun 2018 13:53:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530132785; cv=none; d=google.com; s=arc-20160816; b=iy6w6l1RqIA30SNdCKWr0j2qTEayTNb1TMR8PNyj07ZmY9tbC57DICbm2Uxdh5Dose Mjy5SqGaAaOyZ0b+zVU7CXIcc7H69QVBxFsD0DH/dN4aN6tpae8D83XZdCG5LdRQb4Yi BYKVqyf9o60kXVWWBCXTd0k7z8Mel1jIyRTV7AaAhgU9at/y/jy1ieU/vg+QFmxlV7SU rVR+rP4/7qZCX+kuBQXd+kJ6zuDmKX3t0Wqc3AvoV3uGVlOWFpDDGkVOp0v3HyGdHGzC +krz8kjaNUA7sWLWTmR3P9W2bVnW1VANlhIhDPMRdDddR+jUwj+TuCOKnt9lr17BEf/S CJEQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:user-agent:in-reply-to :content-disposition:mime-version:references:message-id:subject:cc :to:from:date:arc-authentication-results; bh=okbAy53czPVfA6EYdSZN86krvVVyVzAACeOBJ7lFMk8=; b=SwrgFf03zdno7LDh7AIwQhDchw+rFmwEaS/eWF05uuWqcqItRKdcw0SKN9d8R0n78Y 67gel2rqsbk6pc+5jLaQpU6OWhIUBbKzo8hUO2ohMQVxgm1N7ZvA9YN20Fku0f9Ir9oi 0oKWbBJ65c2p8WJaCy4rAQD7CcNR5spWNWHO38VWja3VxrEiH40ywFWiyqgvyRWSWaM9 NyA5evx0NTRkwYAtTKBJY9jDgyy83x1x17K4ACy7RNw+HX9lFC5xYEzIe1ZwMYK4mdhD 1LbCByt5h81zHM2eir9k4olMFTP9rzSytFvtT7fyFSjUyxaw1edcK1TVupeBpeQKxb9o 1t8A== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c16-v6si2635071pgw.460.2018.06.27.13.52.51; Wed, 27 Jun 2018 13:53:05 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S965505AbeF0Uqc (ORCPT + 99 others); Wed, 27 Jun 2018 16:46:32 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:54920 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S965010AbeF0Uqb (ORCPT ); Wed, 27 Jun 2018 16:46:31 -0400 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.rdu2.redhat.com [10.11.54.5]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 793A04075757; Wed, 27 Jun 2018 20:46:30 +0000 (UTC) Received: from krava (ovpn-204-52.brq.redhat.com [10.40.204.52]) by smtp.corp.redhat.com (Postfix) with SMTP id 403ED1C672; Wed, 27 Jun 2018 20:46:25 +0000 (UTC) Date: Wed, 27 Jun 2018 22:46:25 +0200 From: Jiri Olsa To: Tvrtko Ursulin Cc: linux-kernel@vger.kernel.org, Tvrtko Ursulin , Thomas Gleixner , Peter Zijlstra , Ingo Molnar , "H. Peter Anvin" , Arnaldo Carvalho de Melo , Alexander Shishkin , Namhyung Kim , Madhavan Srinivasan , Andi Kleen , Alexey Budankov , x86@kernel.org, Mathieu Poirier , Kim Phillips , Adrian Hunter Subject: Re: [RFC 0/4] perf: Per PMU access controls (paranoid setting) Message-ID: <20180627204625.GD18152@krava> References: <20180626153642.5587-1-tvrtko.ursulin@linux.intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20180626153642.5587-1-tvrtko.ursulin@linux.intel.com> User-Agent: Mutt/1.10.0 (2018-05-17) X-Scanned-By: MIMEDefang 2.79 on 10.11.54.5 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 27 Jun 2018 20:46:30 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.7]); Wed, 27 Jun 2018 20:46:30 +0000 (UTC) for IP:'10.11.54.5' DOMAIN:'int-mx05.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'jolsa@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jun 26, 2018 at 04:36:38PM +0100, Tvrtko Ursulin wrote: > From: Tvrtko Ursulin > > For situations where sysadmins might want to allow different level of > access control for different PMUs, we start creating per-PMU > perf_event_paranoid controls in sysfs. > > These work in equivalent fashion as the existing perf_event_paranoid > sysctl, which now becomes the parent control for each PMU. > > On PMU registration the global/parent value will be inherited by each PMU, > as it will be propagated to all registered PMUs when the sysctl is > updated. > > At any later point individual PMU access controls, located in > /device//perf_event_paranoid, can be adjusted to achieve > fine grained access control. > > Discussion from previous posting: > https://lkml.org/lkml/2018/5/21/156 > > Cc: Thomas Gleixner > Cc: Peter Zijlstra > Cc: Ingo Molnar > Cc: "H. Peter Anvin" > Cc: Arnaldo Carvalho de Melo > Cc: Alexander Shishkin > Cc: Jiri Olsa > Cc: Namhyung Kim > Cc: Madhavan Srinivasan > Cc: Andi Kleen > Cc: Alexey Budankov > Cc: linux-kernel@vger.kernel.org > Cc: x86@kernel.org > > Tvrtko Ursulin (4): > perf: Move some access checks later in perf_event_open > perf: Pass pmu pointer to perf_paranoid_* helpers > perf: Allow per PMU access control > perf Documentation: Document the per PMU perf_event_paranoid interface I think we'll need some perf tool changes for this apart from the hint/docs, that checks/display paranoid value, I think we need some changes in arch related code like below (untested) jirka --- diff --git a/tools/perf/arch/arm/util/cs-etm.c b/tools/perf/arch/arm/util/cs-etm.c index 2f595cd73da6..a5437f100ab9 100644 --- a/tools/perf/arch/arm/util/cs-etm.c +++ b/tools/perf/arch/arm/util/cs-etm.c @@ -69,7 +69,7 @@ static int cs_etm_recording_options(struct auxtrace_record *itr, struct perf_pmu *cs_etm_pmu = ptr->cs_etm_pmu; struct perf_evsel *evsel, *cs_etm_evsel = NULL; const struct cpu_map *cpus = evlist->cpus; - bool privileged = (geteuid() == 0 || perf_event_paranoid() < 0); + bool privileged = (geteuid() == 0 || cs_etm_pmu->paranoid < 0); ptr->evlist = evlist; ptr->snapshot_mode = opts->auxtrace_snapshot_mode; diff --git a/tools/perf/arch/arm64/util/arm-spe.c b/tools/perf/arch/arm64/util/arm-spe.c index 1120e39c1b00..89d3d27ed8be 100644 --- a/tools/perf/arch/arm64/util/arm-spe.c +++ b/tools/perf/arch/arm64/util/arm-spe.c @@ -65,7 +65,7 @@ static int arm_spe_recording_options(struct auxtrace_record *itr, container_of(itr, struct arm_spe_recording, itr); struct perf_pmu *arm_spe_pmu = sper->arm_spe_pmu; struct perf_evsel *evsel, *arm_spe_evsel = NULL; - bool privileged = geteuid() == 0 || perf_event_paranoid() < 0; + bool privileged = geteuid() == 0 || arm_spe_pmu->paranoid < 0; struct perf_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 781df40b2966..c97e6556c8e7 100644 --- a/tools/perf/arch/x86/util/intel-bts.c +++ b/tools/perf/arch/x86/util/intel-bts.c @@ -116,7 +116,7 @@ static int intel_bts_recording_options(struct auxtrace_record *itr, struct perf_pmu *intel_bts_pmu = btsr->intel_bts_pmu; struct perf_evsel *evsel, *intel_bts_evsel = NULL; const struct cpu_map *cpus = evlist->cpus; - bool privileged = geteuid() == 0 || perf_event_paranoid() < 0; + bool privileged = geteuid() == 0 || intel_bts_pmu->paranoid < 0; 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 db0ba8caf5a2..ffbe5f7f1c57 100644 --- a/tools/perf/arch/x86/util/intel-pt.c +++ b/tools/perf/arch/x86/util/intel-pt.c @@ -555,7 +555,7 @@ static int intel_pt_recording_options(struct auxtrace_record *itr, bool have_timing_info, need_immediate = false; struct perf_evsel *evsel, *intel_pt_evsel = NULL; const struct cpu_map *cpus = evlist->cpus; - bool privileged = geteuid() == 0 || perf_event_paranoid() < 0; + bool privileged = geteuid() == 0 || intel_pt_pmu->paranoid < 0; u64 tsc_bit; int err; diff --git a/tools/perf/util/pmu.c b/tools/perf/util/pmu.c index d2fb597c9a8c..f2a91305a8b6 100644 --- a/tools/perf/util/pmu.c +++ b/tools/perf/util/pmu.c @@ -450,6 +450,20 @@ static int pmu_type(const char *name, __u32 *type) return ret; } +static int pmu_paranoid(const char *name) +{ + char path[PATH_MAX]; + int paranoid; + + snprintf(path, PATH_MAX, + EVENT_SOURCE_DEVICE_PATH "%s/perf_event_paranoid", name); + + if (!sysfs__read_int(EVENT_SOURCE_DEVICE_PATH, ¶noid)) + return paranoid; + + return perf_event_paranoid(); +} + /* Add all pmus in sysfs to pmu list: */ static void pmu_read_sysfs(void) { @@ -736,6 +750,7 @@ static struct perf_pmu *pmu_lookup(const char *name) pmu->name = strdup(name); pmu->type = type; pmu->is_uncore = pmu_is_uncore(name); + pmu->paranoid = pmu_paranoid(name); pmu_add_cpu_aliases(&aliases, pmu); INIT_LIST_HEAD(&pmu->format); diff --git a/tools/perf/util/pmu.h b/tools/perf/util/pmu.h index 76fecec7b3f9..1f00c8bbdb90 100644 --- a/tools/perf/util/pmu.h +++ b/tools/perf/util/pmu.h @@ -30,6 +30,7 @@ struct perf_pmu { struct list_head aliases; /* HEAD struct perf_pmu_alias -> list */ struct list_head list; /* ELEM */ int (*set_drv_config) (struct perf_evsel_config_term *term); + int paranoid; }; struct perf_pmu_info {