Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp2478030pxa; Mon, 17 Aug 2020 10:33:04 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwwn/FBJzECLESWMHBESVLarOHk9Ld+D9S2lV5LBqLD0C4Cu/sYpQcIdc3zFxXkR9vbQJSM X-Received: by 2002:a17:906:4f8f:: with SMTP id o15mr15872341eju.220.1597685583743; Mon, 17 Aug 2020 10:33:03 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1597685583; cv=none; d=google.com; s=arc-20160816; b=s9WZ6Y33zYxgqFZFcYhhQhls2MYVDNDcZXTT7EClB52g+zr6NeyUa5PzXjL4Ng4dMI rpyohqO0ANqRliwnng4A+SNBNgpFKC9UYfPl7PU6Xqza98WZiDZwq35kCeN91tGz4ouU N8BbDCy3bq3eHQq9UG4bdgKsMbPEnTpvrmy/EqWkycqvGIGYTR5JKYXjie3WDfwHAfU2 baiKuJy074r477C3MWjg+3szDEVP4YaU/LgEGXsK/ERM2ZZS3/CCl67dSHHsXTbNnH1V x/dEWY40RAfraiS+hdVuJjEX3aQKx5ZmYdpD5dtoyRVOtID8XKSg1QH4UefT4cC0CwhT YpNQ== 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:cc:to:from :subject:references:mime-version:message-id:in-reply-to:date :dkim-signature; bh=UJJuAgJHQPnZMmpmLTzANSSOedGbmL0b+IVXcx3Ufzs=; b=tjjkmhA2SCYPFGuJUukR9I7lFoUmceRsYHLnv5yFRKF+sryAZ9h1idG7NXoth2sxqG ow1C8LWCjEWWiit2POc8mrTthsSQAFQlx0Tm/mw3h3bdfjPBfRLIKQPt5ZZ0JOmnc2Sl iyVNxX41AcebAfmypjKV2bgKjptNzTWqck2SgHDtDeAA44wmHuomfGFa7J0XJq/u3beV +9PsiXjamIxFoysvCEhl/7WusdKcVBEnXGW0iZkSzz7Ws/d0G+KAvuygpNDFQtDH2P0L PQi2Au1ZWaXpxiqFWH4wrHc4QXY2OHHcraEtRLOSVV00tEOvzoV7zuNHTGMKdM5LV6qW uTdg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=v0rOCwpT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id k13si11212497ejb.579.2020.08.17.10.32.40; Mon, 17 Aug 2020 10:33:03 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=v0rOCwpT; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2389215AbgHQR3C (ORCPT + 99 others); Mon, 17 Aug 2020 13:29:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:49134 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389342AbgHQRI1 (ORCPT ); Mon, 17 Aug 2020 13:08:27 -0400 Received: from mail-qv1-xf49.google.com (mail-qv1-xf49.google.com [IPv6:2607:f8b0:4864:20::f49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6B166C061345 for ; Mon, 17 Aug 2020 10:08:27 -0700 (PDT) Received: by mail-qv1-xf49.google.com with SMTP id q12so11343660qvm.19 for ; Mon, 17 Aug 2020 10:08:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=UJJuAgJHQPnZMmpmLTzANSSOedGbmL0b+IVXcx3Ufzs=; b=v0rOCwpTkjRzfGnF2j8U3++ah+cWR7bAfIci0JLRCzHhoCND9w63qxJtFji0g8qm9H JW5ukYsE4fnaO28tNwcBnJBn+DfmI6r3Y8OpLmZ09l2xXBekBeJYwvliiHfSCzfZCYZr xpmhjHdU9y/aXL1u2l7zv4WdzHctL3iaH5QPKoW5+ZbyJAP434SVP1+HMc+UlaLV6csV 1f2KBTPi23YkBo9huXsOLBGbm8eUZlzOXnlnB7+nsmHQmjHxCwRIY0Vl8jnb8MnPPL7g kYLQTvVM+GkrKIDg644UJzInyNQ7U+yQcJke/tymBPP0BEs0jK63wAwJWMpVQW1GLoJ4 Mq2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=UJJuAgJHQPnZMmpmLTzANSSOedGbmL0b+IVXcx3Ufzs=; b=EIjhpUiLgs5PwQ1NWNzRUFD6P9XIv7Vqp72Jqe+THXoRq4hmeW2Gd2ctJSF9xorlj4 41wgYOhi2Tx/Zo8Yzj2+QlhxWMTtekLyKVzHflNwzruSuRvUXKkk6MNSEYbrW1UzeNvE UNgFijiha3oL8G0hJ3UFJNeZ3pa6vlVvZ4xTyu39PmF/5VW5/Kza7XruRGZO8kO4dzW4 r2v/mvS6gLLG0Jw4+2q3QiVAtLA2RHn5RnIO9GNnZCUjp5f9kwvix2AAFfcRK4/uopdm ZUoffdy50/hGonDZQvTj+PWvD7M7CHW8uVAh6yaMHyGn7Zo51gWGG5XBBW4xmcZJhE4N YAZA== X-Gm-Message-State: AOAM53302yUOYCt3fcohZ5ngEA2HX32pTR1I9yLJGN1lw7xu9lAFEWat WSNctllWUb3tcseG65luupEjzT1iTQ== X-Received: by 2002:a0c:f6cb:: with SMTP id d11mr15516103qvo.84.1597684106062; Mon, 17 Aug 2020 10:08:26 -0700 (PDT) Date: Mon, 17 Aug 2020 19:07:12 +0200 In-Reply-To: <20200817170729.2605279-1-tweek@google.com> Message-Id: <20200817170729.2605279-2-tweek@google.com> Mime-Version: 1.0 References: <20200817170729.2605279-1-tweek@google.com> X-Mailer: git-send-email 2.28.0.220.ged08abb693-goog Subject: [PATCH v3 1/3] selinux: add tracepoint on audited events From: "=?UTF-8?q?Thi=C3=A9baud=20Weksteen?=" To: Paul Moore Cc: Nick Kralevich , "=?UTF-8?q?Thi=C3=A9baud=20Weksteen?=" , Joel Fernandes , Peter Enderborg , Stephen Smalley , Eric Paris , Steven Rostedt , Ingo Molnar , Mauro Carvalho Chehab , "David S. Miller" , Rob Herring , linux-kernel@vger.kernel.org, selinux@vger.kernel.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The audit data currently captures which process and which target is responsible for a denial. There is no data on where exactly in the process that call occurred. Debugging can be made easier by being able to reconstruct the unified kernel and userland stack traces [1]. Add a tracepoint on the SELinux denials which can then be used by userland (i.e. perf). Although this patch could manually be added by each OS developer to trouble shoot a denial, adding it to the kernel streamlines the developers workflow. It is possible to use perf for monitoring the event: # perf record -e avc:selinux_audited -g -a ^C # perf report -g [...] 6.40% 6.40% audited=3D800000 tclass=3D4 | __libc_start_main | |--4.60%--__GI___ioctl | entry_SYSCALL_64 | do_syscall_64 | __x64_sys_ioctl | ksys_ioctl | binder_ioctl | binder_set_nice | can_nice | capable | security_capable | cred_has_capability.isra.0 | slow_avc_audit | common_lsm_audit | avc_audit_post_callback | avc_audit_post_callback | It is also possible to use the ftrace interface: # echo 1 > /sys/kernel/debug/tracing/events/avc/selinux_audited/enable # cat /sys/kernel/debug/tracing/trace tracer: nop entries-in-buffer/entries-written: 1/1 #P:8 [...] dmesg-3624 [001] 13072.325358: selinux_denied: audited=3D800000 tclass= =3D4 The tclass value can be mapped to a class by searching security/selinux/flask.h. The audited value is a bit field of the permissions described in security/selinux/av_permissions.h for the corresponding class. [1] https://source.android.com/devices/tech/debug/native_stack_dump Signed-off-by: Thi=C3=A9baud Weksteen Suggested-by: Joel Fernandes Reviewed-by: Peter Enderborg --- MAINTAINERS | 1 + include/trace/events/avc.h | 37 +++++++++++++++++++++++++++++++++++++ security/selinux/avc.c | 5 +++++ 3 files changed, 43 insertions(+) create mode 100644 include/trace/events/avc.h diff --git a/MAINTAINERS b/MAINTAINERS index c8e8232c65da..0efaea0e144c 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -15426,6 +15426,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/gi= t/pcmoore/selinux.git F: Documentation/ABI/obsolete/sysfs-selinux-checkreqprot F: Documentation/ABI/obsolete/sysfs-selinux-disable F: Documentation/admin-guide/LSM/SELinux.rst +F: include/trace/events/avc.h F: include/uapi/linux/selinux_netlink.h F: scripts/selinux/ F: security/selinux/ diff --git a/include/trace/events/avc.h b/include/trace/events/avc.h new file mode 100644 index 000000000000..07c058a9bbcd --- /dev/null +++ b/include/trace/events/avc.h @@ -0,0 +1,37 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* + * Author: Thi=C3=A9baud Weksteen + */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM avc + +#if !defined(_TRACE_SELINUX_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_SELINUX_H + +#include + +TRACE_EVENT(selinux_audited, + + TP_PROTO(struct selinux_audit_data *sad), + + TP_ARGS(sad), + + TP_STRUCT__entry( + __field(unsigned int, tclass) + __field(unsigned int, audited) + ), + + TP_fast_assign( + __entry->tclass =3D sad->tclass; + __entry->audited =3D sad->audited; + ), + + TP_printk("tclass=3D%u audited=3D%x", + __entry->tclass, + __entry->audited) +); + +#endif + +/* This part must be outside protection */ +#include diff --git a/security/selinux/avc.c b/security/selinux/avc.c index d18cb32a242a..b0a0af778b70 100644 --- a/security/selinux/avc.c +++ b/security/selinux/avc.c @@ -31,6 +31,9 @@ #include "avc_ss.h" #include "classmap.h" =20 +#define CREATE_TRACE_POINTS +#include + #define AVC_CACHE_SLOTS 512 #define AVC_DEF_CACHE_THRESHOLD 512 #define AVC_CACHE_RECLAIM 16 @@ -706,6 +709,8 @@ static void avc_audit_post_callback(struct audit_buffer= *ab, void *a) u32 scontext_len; int rc; =20 + trace_selinux_audited(sad); + rc =3D security_sid_to_context(sad->state, sad->ssid, &scontext, &scontext_len); if (rc) --=20 2.28.0.220.ged08abb693-goog