From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [RFC 1/2] perf/pmu: Allow PMU providers to override system-wide security settings Date: Fri, 17 Nov 2017 13:57:22 +0000 Message-ID: <20171117135723.22235-1-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm0-x244.google.com (mail-wm0-x244.google.com [IPv6:2a00:1450:400c:c09::244]) by gabe.freedesktop.org (Postfix) with ESMTPS id F0E006EA28 for ; Fri, 17 Nov 2017 13:57:33 +0000 (UTC) Received: by mail-wm0-x244.google.com with SMTP id b189so6665064wmd.0 for ; Fri, 17 Nov 2017 05:57:33 -0800 (PST) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org Cc: Peter Zijlstra , linux-kernel@vger.kernel.org, Arnaldo Carvalho de Melo , Alexander Shishkin , Ingo Molnar , Namhyung Kim , Jiri Olsa List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClRvIGFsbG93 IHN5c3RlbSBhZG1pbmlzdHJhdG9ycyBmaW5lci1ncmFpbmVkIGNvbnRyb2wgb3ZlciBzZWN1cml0 eQpzZXR0aW5ncywgd2UgYWRkIGFuIG9wdGlvbmFsIHBtdS0+aXNfcHJpdmlsZWdlZChwbXUsIGV2 ZW50KSBjYWxsYmFjawp3aGljaCBpcyBjb25zdWx0ZWQgd2hlbiB1bnByaXZpbGVnZWQgc3lzdGVt LXdpZGUgdW5jb3JlIGV2ZW50IGNvbGxlY3Rpb24KaXMgZGlzYWJsZWQuCgpTaWduZWQtb2ZmLWJ5 OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpDYzogUGV0ZXIgWmlq bHN0cmEgPHBldGVyekBpbmZyYWRlYWQub3JnPgpDYzogSW5nbyBNb2xuYXIgPG1pbmdvQHJlZGhh dC5jb20+CkNjOiBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gPGFjbWVAa2VybmVsLm9yZz4KQ2M6 IEFsZXhhbmRlciBTaGlzaGtpbiA8YWxleGFuZGVyLnNoaXNoa2luQGxpbnV4LmludGVsLmNvbT4K Q2M6IEppcmkgT2xzYSA8am9sc2FAcmVkaGF0LmNvbT4KQ2M6IE5hbWh5dW5nIEtpbSA8bmFtaHl1 bmdAa2VybmVsLm9yZz4KQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmcKQ2M6IERtaXRy eSBSb2dvemhraW4gPGRtaXRyeS52LnJvZ296aGtpbkBpbnRlbC5jb20+CkNjOiBDaHJpcyBXaWxz b24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBpbmNsdWRlL2xpbnV4L3BlcmZfZXZl bnQuaCB8ICA2ICsrKysrKwoga2VybmVsL2V2ZW50cy9jb3JlLmMgICAgICAgfCAxMiArKysrKysr KysrKy0KIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQoK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oIGIvaW5jbHVkZS9saW51eC9w ZXJmX2V2ZW50LmgKaW5kZXggOGUyMmYyNGRlZDZhLi5hOTM2MzBjYWQ2YjkgMTAwNjQ0Ci0tLSBh L2luY2x1ZGUvbGludXgvcGVyZl9ldmVudC5oCisrKyBiL2luY2x1ZGUvbGludXgvcGVyZl9ldmVu dC5oCkBAIC00NDYsNiArNDQ2LDEyIEBAIHN0cnVjdCBwbXUgewogCSAqIEZpbHRlciBldmVudHMg Zm9yIFBNVS1zcGVjaWZpYyByZWFzb25zLgogCSAqLwogCWludCAoKmZpbHRlcl9tYXRjaCkJCShz dHJ1Y3QgcGVyZl9ldmVudCAqZXZlbnQpOyAvKiBvcHRpb25hbCAqLworCisJLyoKKwkgKiBSZXR1 cm5zIHRydWUgaWYgdGhlIGV2ZW50IG5lZWRzIENBUF9TWVNfQURNSU4gcHJpdmlsZWdlIGluIHN5 c3RlbS0KKwkgKiB3aWRlIG1vZGUuCisJICovCisJYm9vbCAoKmlzX3ByaXZpbGVnZWQpCQkoc3Ry dWN0IHBlcmZfZXZlbnQgKmV2ZW50KTsgLyogb3B0aW9uYWwgKi8KIH07CiAKIC8qKgpkaWZmIC0t Z2l0IGEva2VybmVsL2V2ZW50cy9jb3JlLmMgYi9rZXJuZWwvZXZlbnRzL2NvcmUuYwppbmRleCAx ODExZGQ1YWEyZTIuLmFkZWMyOGM4NzllOCAxMDA2NDQKLS0tIGEva2VybmVsL2V2ZW50cy9jb3Jl LmMKKysrIGIva2VybmVsL2V2ZW50cy9jb3JlLmMKQEAgLTM4NDcsNiArMzg0NywxNiBAQCBmaW5k X2xpdmVseV90YXNrX2J5X3ZwaWQocGlkX3QgdnBpZCkKIAlyZXR1cm4gdGFzazsKIH0KIAorc3Rh dGljIGJvb2wgY3B1X2lzX3ByaXZpbGVnZWQoc3RydWN0IHBtdSAqcG11LCBzdHJ1Y3QgcGVyZl9l dmVudCAqZXZlbnQpCit7CisJYm9vbCBwcml2aWxlZ2VkID0gcGVyZl9wYXJhbm9pZF9jcHUoKTsK KworCWlmIChwcml2aWxlZ2VkICYmIHBtdS0+aXNfcHJpdmlsZWdlZCkKKwkJcHJpdmlsZWdlZCA9 IHBtdS0+aXNfcHJpdmlsZWdlZChldmVudCk7CisKKwlyZXR1cm4gcHJpdmlsZWdlZDsKK30KKwog LyoKICAqIFJldHVybnMgYSBtYXRjaGluZyBjb250ZXh0IHdpdGggcmVmY291bnQgYW5kIHBpbmNv dW50LgogICovCkBAIC0zODYzLDcgKzM4NzMsNyBAQCBmaW5kX2dldF9jb250ZXh0KHN0cnVjdCBw bXUgKnBtdSwgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLAogCiAJaWYgKCF0YXNrKSB7CiAJCS8q IE11c3QgYmUgcm9vdCB0byBvcGVyYXRlIG9uIGEgQ1BVIGV2ZW50OiAqLwotCQlpZiAocGVyZl9w YXJhbm9pZF9jcHUoKSAmJiAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJaWYgKGNwdV9pc19w cml2aWxlZ2VkKHBtdSwgZXZlbnQpICYmICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQkJcmV0 dXJuIEVSUl9QVFIoLUVBQ0NFUyk7CiAKIAkJY3B1Y3R4ID0gcGVyX2NwdV9wdHIocG11LT5wbXVf Y3B1X2NvbnRleHQsIGNwdSk7Ci0tIAoyLjE0LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934852AbdKQN5p (ORCPT ); Fri, 17 Nov 2017 08:57:45 -0500 Received: from mail-wm0-f66.google.com ([74.125.82.66]:41576 "EHLO mail-wm0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933420AbdKQN5e (ORCPT ); Fri, 17 Nov 2017 08:57:34 -0500 X-Google-Smtp-Source: AGs4zMZbT0DQ3yTECEpsYco4Ov/SJcqbNTew8IYVvom7kPF+SES0p8hbxCPw5nkqsfOVvoZcC7Roqw== From: Tvrtko Ursulin X-Google-Original-From: Tvrtko Ursulin To: Intel-gfx@lists.freedesktop.org Cc: linux-kernel@vger.kernel.org, Tvrtko Ursulin , Peter Zijlstra , Ingo Molnar , Arnaldo Carvalho de Melo , Alexander Shishkin , Jiri Olsa , Namhyung Kim , Dmitry Rogozhkin , Chris Wilson Subject: [RFC 1/2] perf/pmu: Allow PMU providers to override system-wide security settings Date: Fri, 17 Nov 2017 13:57:22 +0000 Message-Id: <20171117135723.22235-1-tvrtko.ursulin@linux.intel.com> X-Mailer: git-send-email 2.14.1 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tvrtko Ursulin To allow system administrators finer-grained control over security settings, we add an optional pmu->is_privileged(pmu, event) callback which is consulted when unprivileged system-wide uncore event collection is disabled. Signed-off-by: Tvrtko Ursulin Cc: Peter Zijlstra Cc: Ingo Molnar Cc: Arnaldo Carvalho de Melo Cc: Alexander Shishkin Cc: Jiri Olsa Cc: Namhyung Kim Cc: linux-kernel@vger.kernel.org Cc: Dmitry Rogozhkin Cc: Chris Wilson --- include/linux/perf_event.h | 6 ++++++ kernel/events/core.c | 12 +++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/include/linux/perf_event.h b/include/linux/perf_event.h index 8e22f24ded6a..a93630cad6b9 100644 --- a/include/linux/perf_event.h +++ b/include/linux/perf_event.h @@ -446,6 +446,12 @@ struct pmu { * Filter events for PMU-specific reasons. */ int (*filter_match) (struct perf_event *event); /* optional */ + + /* + * Returns true if the event needs CAP_SYS_ADMIN privilege in system- + * wide mode. + */ + bool (*is_privileged) (struct perf_event *event); /* optional */ }; /** diff --git a/kernel/events/core.c b/kernel/events/core.c index 1811dd5aa2e2..adec28c879e8 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -3847,6 +3847,16 @@ find_lively_task_by_vpid(pid_t vpid) return task; } +static bool cpu_is_privileged(struct pmu *pmu, struct perf_event *event) +{ + bool privileged = perf_paranoid_cpu(); + + if (privileged && pmu->is_privileged) + privileged = pmu->is_privileged(event); + + return privileged; +} + /* * Returns a matching context with refcount and pincount. */ @@ -3863,7 +3873,7 @@ find_get_context(struct pmu *pmu, struct task_struct *task, if (!task) { /* Must be root to operate on a CPU event: */ - if (perf_paranoid_cpu() && !capable(CAP_SYS_ADMIN)) + if (cpu_is_privileged(pmu, event) && !capable(CAP_SYS_ADMIN)) return ERR_PTR(-EACCES); cpuctx = per_cpu_ptr(pmu->pmu_cpu_context, cpu); -- 2.14.1