Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp841301pxb; Thu, 19 Nov 2020 15:28:13 -0800 (PST) X-Google-Smtp-Source: ABdhPJyB3jnnyjOChENSf6lp1A3b4MzdWOlaA7kOrNBrzXEJojuJ8u0bIn592VzvHx1bicwHMu3y X-Received: by 2002:a17:906:23e9:: with SMTP id j9mr30268132ejg.344.1605828493115; Thu, 19 Nov 2020 15:28:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605828493; cv=none; d=google.com; s=arc-20160816; b=kSAwmoFZTCRzPHvgPjkB21K5b9PatSKnWxvAAjT+Yyq3ZNwNNy7CmtHJPP8hJibVPE 7OqFOcn46hWahcThuCTgM/egDzSAZgr2dA+2hM96jzY2TnirzagAYqHlektWkbg9HHKf o+6y/ODT+7NOxxpX21hNv8YMxjb8lD/qYQEsxVt52/hbTPxPaWaoAPjU8U18V4UeIkfr i3eQClbkkfa+FyLoB+epMo2nO4fLKF8PSxGFvV3rj+OKoSxL4jhQuIU4GWhGFVeSJ8KS s69tDf9mURiY81+vsJKnom+6cXoSJ4ZnGtsrOoM9igNzatkcdoqaQn0gTNqx6caD43F0 sveA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:references:in-reply-to:message-id:date:subject :cc:to:from:dkim-signature:dkim-filter; bh=zxzJjRVL4Fw/rli7hkZOoZEuxfHZymVb0lvoIbeaev0=; b=nMM9RbC+RbNyUsFJ/QKaeSaCqZvIAaSuaG+9z2jxhv0h4LY8SXlMicM0rZUXPPXd1E 2hKKxpiLFKgqFh8Qp+hkpISlNBoqgrV5KKpHt47kZtMIYGRHOMfhqC/X12dwWUjuKYtQ 9JSbntK1r4QNC4RiRltSMHhLpgWTWantyRRWTXXCQcbwxtn7Fc6Hnj6C9jAFt7a4yVxQ xlxUbV5YcXA0UXmYChjQTIrF+7U9Iaw0jceCDuiVUk+0vnKFyPu+WXpapQ17vpHbko5q x6hiLrGgNdLJ/RmmLG3Eug7agOCArfNNjZXoXwAlidnduZMbtXUYPcmUqGB0wuAxfCug o75A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=HMfweoFp; 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=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id dt10si832794ejc.145.2020.11.19.15.27.50; Thu, 19 Nov 2020 15:28:13 -0800 (PST) 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=@linux.microsoft.com header.s=default header.b=HMfweoFp; 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=NONE sp=NONE dis=NONE) header.from=linux.microsoft.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727119AbgKSX02 (ORCPT + 99 others); Thu, 19 Nov 2020 18:26:28 -0500 Received: from linux.microsoft.com ([13.77.154.182]:32978 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727069AbgKSX0Z (ORCPT ); Thu, 19 Nov 2020 18:26:25 -0500 Received: from tusharsu-Ubuntu.lan (c-71-197-163-6.hsd1.wa.comcast.net [71.197.163.6]) by linux.microsoft.com (Postfix) with ESMTPSA id 0411720B7133; Thu, 19 Nov 2020 15:26:23 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 0411720B7133 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1605828384; bh=zxzJjRVL4Fw/rli7hkZOoZEuxfHZymVb0lvoIbeaev0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=HMfweoFp7uHK00RJeXeETLV0MZGJdjAIqIz5bVWxDLV8uCide56pZiI4B2M1mhyCb mff2cJPlCShtEo1DjwLEns1rswSZVbfmIm/UM3jBCxU7y6s5EMObHcS8MYIXjiEddf qcNIKd2hrOxzFfwrhfYSEwT/87v5ugPIppyH/5iY= From: Tushar Sugandhi To: zohar@linux.ibm.com, stephen.smalley.work@gmail.com, casey@schaufler-ca.com, agk@redhat.com, snitzer@redhat.com, gmazyland@gmail.com, paul@paul-moore.com Cc: tyhicks@linux.microsoft.com, sashal@kernel.org, jmorris@namei.org, nramas@linux.microsoft.com, linux-integrity@vger.kernel.org, selinux@vger.kernel.org, linux-security-module@vger.kernel.org, linux-kernel@vger.kernel.org, dm-devel@redhat.com Subject: [PATCH v6 6/8] IMA: add support to critical data hook to limit data sources for measurement Date: Thu, 19 Nov 2020 15:26:09 -0800 Message-Id: <20201119232611.30114-7-tusharsu@linux.microsoft.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20201119232611.30114-1-tusharsu@linux.microsoft.com> References: <20201119232611.30114-1-tusharsu@linux.microsoft.com> Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The IMA hook ima_measure_critical_data() does not support a way to specify the source of the critical data provider. Thus, the data measurement cannot be constrained, based on the data source, through the IMA policy. Extend the IMA hook ima_measure_critical_data() to support passing the data source name as an input parameter, so that the policy rule can be used to limit data sources being measured. Signed-off-by: Tushar Sugandhi --- include/linux/ima.h | 6 ++++-- security/integrity/ima/ima_main.c | 11 ++++++++--- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/linux/ima.h b/include/linux/ima.h index 9911a6e496b6..60ba073f1575 100644 --- a/include/linux/ima.h +++ b/include/linux/ima.h @@ -30,7 +30,8 @@ extern int ima_post_read_file(struct file *file, void *buf, loff_t size, extern void ima_post_path_mknod(struct dentry *dentry); extern int ima_file_hash(struct file *file, char *buf, size_t buf_size); extern void ima_kexec_cmdline(int kernel_fd, const void *buf, int size); -extern void ima_measure_critical_data(const char *event_name, +extern void ima_measure_critical_data(const char *event_data_source, + const char *event_name, const void *buf, int buf_len, bool measure_buf_hash); @@ -119,7 +120,8 @@ static inline int ima_file_hash(struct file *file, char *buf, size_t buf_size) } static inline void ima_kexec_cmdline(int kernel_fd, const void *buf, int size) {} -static inline void ima_measure_critical_data(const char *event_name, +static inline void ima_measure_critical_data(const char *event_data_source, + const char *event_name, const void *buf, int buf_len, bool measure_buf_hash) {} #endif /* CONFIG_IMA */ diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c index 7661f09569f3..27b8b8316622 100644 --- a/security/integrity/ima/ima_main.c +++ b/security/integrity/ima/ima_main.c @@ -924,6 +924,7 @@ void ima_kexec_cmdline(int kernel_fd, const void *buf, int size) /** * ima_measure_critical_data - measure kernel integrity critical data + * @event_data_source: kernel data source being measured * @event_name: event name to be used for the buffer entry * @buf: pointer to buffer containing data to measure * @buf_len: length of buffer(in bytes) @@ -932,6 +933,9 @@ void ima_kexec_cmdline(int kernel_fd, const void *buf, int size) * Measure the kernel subsystem data, critical to the integrity of the kernel, * into the IMA log and extend the @pcr. * + * Use @event_data_source to describe the kernel data source for the buffer + * being measured. + * * Use @event_name to describe the state/buffer data change. * Examples of critical data (buf) could be kernel in-memory r/o structures, * hash of the memory structures, or data that represents subsystem state @@ -944,17 +948,18 @@ void ima_kexec_cmdline(int kernel_fd, const void *buf, int size) * * The data (buf) can only be measured, not appraised. */ -void ima_measure_critical_data(const char *event_name, +void ima_measure_critical_data(const char *event_data_source, + const char *event_name, const void *buf, int buf_len, bool measure_buf_hash) { - if (!event_name || !buf || !buf_len) { + if (!event_name || !event_data_source || !buf || !buf_len) { pr_err("Invalid arguments passed to %s().\n", __func__); return; } process_buffer_measurement(NULL, buf, buf_len, event_name, - CRITICAL_DATA, 0, NULL, + CRITICAL_DATA, 0, event_data_source, measure_buf_hash); } -- 2.17.1