Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp4506194ybv; Mon, 17 Feb 2020 00:09:42 -0800 (PST) X-Google-Smtp-Source: APXvYqyrPzqaNpjortdQJxtThXu+hDdNLwWqk6GQkzX4+Xwyo3gOH1KJo+ylc3PIoNxMt8e22iTj X-Received: by 2002:a05:6808:8ca:: with SMTP id k10mr9100085oij.164.1581926982252; Mon, 17 Feb 2020 00:09:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581926982; cv=none; d=google.com; s=arc-20160816; b=s5uHvIKNxLmqQrq/AaxjeOvltgxZe1R6fhabyUXlXLqRZVGE2KOWIf87maLfcojaDO 4tc5sBDxQ1+XhwUar5JDQBDd/T7Mx6KNbuYvjlUxmoQj27zHUkF8YuHQoOGx6+VjgTpo BldXgmk4Xx/iXTAWi5FZwCT7yEhL9XYSchHfAaEM2h3845etFvTtrgRVnWriToXVUT4I ATdhzQoxs0JOQCq/cxz9AigcTa2XqMwJhANWX7XNi4N9oUDUFW2KWnYtaVJhNEj3PC61 GA9B+h7/v/IfmzS1DMxHVC77fcjHcPv5p1Er3cfwnVq0FNb5pIHNgmB1VubHMe2aprT6 3PpA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:organization:references:cc:to:from:subject; bh=9CPH1gP1o5KmEX8SLO2aLymTzW1nBsdJeBnI/cbe4s0=; b=tJUuEmWZguxxMaVk9TXM7op+hBT+k9QZke1Sn4r/XMyDmGevqauaK414nUd5MqisAx thwLvu2U6dZyFPZAnuI59X4yn3ToUzF/bcfV3wdcnyjgDKBoTGj1jlmcg2tF8rGDIwLr fYjY5W3ZOqdlFVgoyye0F7FeHhZOGiFP/TaeLRwwYa+M4Fy0p+RNWTm9sCJFY0Y3Rylb zeD4cJ/0iJPlZClI5QpBzzzboT+V9TZHzV9LmPMMBslx6dAy4MpClHo//UFPYBFhXt4F 9jxpiKYbNlvrQwJz2cuwi/HYSyjD3LCbc6w68MdmdkGFOkHX9XdDemU3YztfL/tnh2ip YLzA== 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=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 5si6050721oir.9.2020.02.17.00.09.30; Mon, 17 Feb 2020 00:09:42 -0800 (PST) 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=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727545AbgBQIHp (ORCPT + 99 others); Mon, 17 Feb 2020 03:07:45 -0500 Received: from mga03.intel.com ([134.134.136.65]:29037 "EHLO mga03.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726996AbgBQIHp (ORCPT ); Mon, 17 Feb 2020 03:07:45 -0500 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga103.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 17 Feb 2020 00:07:44 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.70,451,1574150400"; d="scan'208";a="314705824" Received: from linux.intel.com ([10.54.29.200]) by orsmga001.jf.intel.com with ESMTP; 17 Feb 2020 00:07:44 -0800 Received: from [10.125.252.180] (abudanko-mobl.ccr.corp.intel.com [10.125.252.180]) by linux.intel.com (Postfix) with ESMTP id 27D7258052E; Mon, 17 Feb 2020 00:07:37 -0800 (PST) Subject: [PATCH v7 03/12] perf/core: open access to probes for CAP_PERFMON privileged process From: Alexey Budankov To: James Morris , Serge Hallyn , Stephen Smalley , Peter Zijlstra , Arnaldo Carvalho de Melo , Ingo Molnar , "joonas.lahtinen@linux.intel.com" , Alexei Starovoitov , Will Deacon , Paul Mackerras , Helge Deller , Thomas Gleixner Cc: Andi Kleen , Stephane Eranian , Igor Lubashev , Jiri Olsa , linux-kernel , "intel-gfx@lists.freedesktop.org" , "linux-security-module@vger.kernel.org" , "selinux@vger.kernel.org" , linux-arm-kernel , "linuxppc-dev@lists.ozlabs.org" , "linux-parisc@vger.kernel.org" , oprofile-list@lists.sf.net, "linux-doc@vger.kernel.org" , linux-man@vger.kernel.org References: Organization: Intel Corp. Message-ID: <3364fa26-b5d1-1808-aaee-c057f26e0eb4@linux.intel.com> Date: Mon, 17 Feb 2020 11:07:37 +0300 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Open access to monitoring via kprobes and uprobes and eBPF tracing for CAP_PERFMON privileged process. Providing the access under CAP_PERFMON capability singly, without the rest of CAP_SYS_ADMIN credentials, excludes chances to misuse the credentials and makes operation more secure. perf kprobes and uprobes are used by ftrace and eBPF. perf probe uses ftrace to define new kprobe events, and those events are treated as tracepoint events. eBPF defines new probes via perf_event_open interface and then the probes are used in eBPF tracing. CAP_PERFMON implements the principal of least privilege for performance monitoring and observability operations (POSIX IEEE 1003.1e 2.2.2.39 principle of least privilege: A security design principle that states that a process or program be granted only those privileges (e.g., capabilities) necessary to accomplish its legitimate function, and only for the time that such privileges are actually required) For backward compatibility reasons access to perf_events subsystem remains open for CAP_SYS_ADMIN privileged processes but CAP_SYS_ADMIN usage for secure perf_events monitoring is discouraged with respect to CAP_PERFMON capability. Signed-off-by: Alexey Budankov --- kernel/events/core.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/events/core.c b/kernel/events/core.c index 46464367c47a..4564caa2c527 100644 --- a/kernel/events/core.c +++ b/kernel/events/core.c @@ -9107,7 +9107,7 @@ static int perf_kprobe_event_init(struct perf_event *event) if (event->attr.type != perf_kprobe.type) return -ENOENT; - if (!capable(CAP_SYS_ADMIN)) + if (!perfmon_capable()) return -EACCES; /* @@ -9167,7 +9167,7 @@ static int perf_uprobe_event_init(struct perf_event *event) if (event->attr.type != perf_uprobe.type) return -ENOENT; - if (!capable(CAP_SYS_ADMIN)) + if (!perfmon_capable()) return -EACCES; /* -- 2.20.1