Received: by 2002:a05:6a10:16a7:0:0:0:0 with SMTP id gp39csp692407pxb; Thu, 12 Nov 2020 13:59:53 -0800 (PST) X-Google-Smtp-Source: ABdhPJyB73R4n1SNBekVpgj/m+XMGvNf6ThpZzZnvVeWf/8C3WNltjby/CXl3/7bWUV3VSP/Mkkn X-Received: by 2002:a17:906:ae95:: with SMTP id md21mr1339829ejb.425.1605218393086; Thu, 12 Nov 2020 13:59:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1605218393; cv=none; d=google.com; s=arc-20160816; b=mba0M9B3KOgsBcDsJXyB4zFJBSHBrIY6kgl3x6lZJtGWuI4mMsLjMBgtGGuDC74ve1 8ObDnrN42VqFgKwHRJT1HeLRwPOxbzcISGBN8+jSqgZIZ6i338E3uMYasB4jP+/WDSP/ ELwEmTdKTzsAHwp9ly/XssZQwkt5RCr2DypRqbVk2YqhTF3plSAjqi96WM/CKWgnIMdF ptvN/vhz3vSJx+W6jm6IIGGNRjEDlV6PwJLYCU63/a0d0mx7GvqxGYgCFbl5PHQaO2rD tZa6IiPsMtxfHkMOw6zPFP3tFIbXgbqnsGW7zsS2U89mLL9zWCnlIvibnc7TN4vSEGbI YN8Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject:dkim-signature:dkim-filter; bh=PkdjkruNANX8wdTbYPq9U2AHzVXQRRmafd7bWjQQQ9Y=; b=z8sz33eTfxqTPxzpWWwKeAwTEH36+5UbUcrxnb7VV/5O+oWMqridVt6+7kimWUR87/ WznrnqRnq//SzuZAptYkQ18D0TTnOZQWakutLKFbgqK5dYSEk1O1qgYjvd9/aM7XKSqT ab4RnDJ0qdRqgUiPw2K3DSqUcQ6idtccrETmoXNrXDtDSJE1VY6QVvb3PcJL6+AiPe/v FdPUZnZDCq0lW6JdPHfbZD5pBCKJ4Dy5Da/Ysnee045sP15E3Sl+i3S4pnlSE1dsMfFU moEOzUIT7X2hKA305Zf5Thj5WJZAEsx246wrQRrjEeZjRJHZlHp75p7Q6vLRxibin8Wr g14w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linux.microsoft.com header.s=default header.b=pb5+ds9Y; 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 dk4si4952501edb.429.2020.11.12.13.59.28; Thu, 12 Nov 2020 13:59:53 -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=pb5+ds9Y; 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 S1727260AbgKLV5Z (ORCPT + 99 others); Thu, 12 Nov 2020 16:57:25 -0500 Received: from linux.microsoft.com ([13.77.154.182]:54722 "EHLO linux.microsoft.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727043AbgKLV5Y (ORCPT ); Thu, 12 Nov 2020 16:57:24 -0500 Received: from [192.168.86.31] (c-71-197-163-6.hsd1.wa.comcast.net [71.197.163.6]) by linux.microsoft.com (Postfix) with ESMTPSA id CBA5920C2872; Thu, 12 Nov 2020 13:57:22 -0800 (PST) DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com CBA5920C2872 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1605218243; bh=PkdjkruNANX8wdTbYPq9U2AHzVXQRRmafd7bWjQQQ9Y=; h=Subject:To:Cc:References:From:Date:In-Reply-To:From; b=pb5+ds9Y1dHnrmNkg9sdbhb7z8gLlGW/fGr6/SoubR2iPOSlWiXvd8Cuj8JRaXBJ+ zCz4CA7hkVKQ/Jxg4W1xa03C7v0iARqYKG8lptnRBYBhctzmlh2naTTJrP/2HwfMVd WM5cawaRS7G50Pc3DbXOkRnm7IH9v2F2XoizC3WY= Subject: Re: [PATCH v5 3/7] IMA: add hook to measure critical data To: Mimi Zohar , 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 References: <20201101222626.6111-1-tusharsu@linux.microsoft.com> <20201101222626.6111-4-tusharsu@linux.microsoft.com> <1f83ec246cb6356c340b379ab00e43f0b5bba0ae.camel@linux.ibm.com> From: Tushar Sugandhi Message-ID: <25622ca6-359d-fa97-c5e6-e314cba51306@linux.microsoft.com> Date: Thu, 12 Nov 2020 13:57:22 -0800 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <1f83ec246cb6356c340b379ab00e43f0b5bba0ae.camel@linux.ibm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2020-11-06 5:24 a.m., Mimi Zohar wrote: > Hi Tushar, > > On Sun, 2020-11-01 at 14:26 -0800, Tushar Sugandhi wrote: >> Currently, IMA does not provide a generic function for kernel subsystems >> to measure their critical data. Examples of critical data in this context >> could be kernel in-memory r/o structures, hash of the memory structures, >> or data that represents a linux kernel subsystem state change. The >> critical data, if accidentally or maliciously altered, can compromise >> the integrity of the system. > > Start out with what IMA does do (e.g. measures files and more recently > buffer data). Afterwards continue with kernel integrity critical data > should also be measured. Please include a definition of kernel > integrity critical data here, as well as in the cover letter. > Yes, will do. I will also describe what kernel integrity critical data is – by providing a definition, and not by example - as you suggested. (here and in the cover letter) >> >> A generic function provided by IMA to measure critical data would enable >> various subsystems with easier and faster on-boarding to use IMA >> infrastructure and would also avoid code duplication. > > By definition LSM and IMA hooks are generic with callers in appropriate > places in the kernel. This paragraph is redundant. > Sounds good. I will remove this paragraph. >> >> Add a new IMA func CRITICAL_DATA and a corresponding IMA hook >> ima_measure_critical_data() to support measuring critical data for >> various kernel subsystems. > > Instead of using the word "add", it would be more appropriate to use > the word "define". Define a new IMA hook named > ima_measure_critical_data to measure kernel integrity critical data. > Please also update the Subject line as well. "ima: define an IMA hook > to measure kernel integrity critical data". > Sounds good. Will do. >> >> Signed-off-by: Tushar Sugandhi >> --- >> >> diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c >> index 4485d87c0aa5..6e1b11dcba53 100644 >> --- a/security/integrity/ima/ima_main.c >> +++ b/security/integrity/ima/ima_main.c >> @@ -921,6 +921,44 @@ void ima_kexec_cmdline(int kernel_fd, const void *buf, int size) >> fdput(f); >> } >> >> +/** >> + * ima_measure_critical_data - measure kernel subsystem data >> + * critical to integrity of the kernel > > Please change this to "measure kernel integrity critical data". > *Question* Thanks Mimi. Do you want us just to update the description, or do you want us to update the function name too? I believe you meant just description, but still want to clarify. ima_measure_kernel_integrity_critical_data() would be too long. Maybe ima_measure_integrity_critical_data()? Or do you want us to keep the existing ima_measure_critical_data()? Could you please let us know? >> + * @event_data_source: name of the data source being measured; >> + * typically it should be the name of the kernel subsystem that is sending >> + * the data for measurement > > Including "data_source" here isn't quite right. "data source" should > only be added in the first patch which uses it, not here. When adding > it please shorten the field description to "kernel data source". The > longer explanation can be included in the longer function description. > *Question* Do you mean the parameter @event_data_source should be removed from this patch? And then later added in patch 7/7 – where SeLinux uses it? But ima_measure_critical_data() calls process_buffer_measurement(), and p_b_m() accepts it as part of the param @func_data. What should we pass to p_b_m() @func_data in this patch, if we remove @event_data_source from this patch? >> + * @event_name: name of an event from the kernel subsystem that is sending >> + * the data for measurement > > As this is being passed to process_buffer_measurement(), this should be > the same or similar to the existing definition. > Ok. I will change this to @eventname to be consistemt with p_b_m(). >> + * @buf: pointer to buffer containing data to measure >> + * @buf_len: length of buffer(in bytes) >> + * @measure_buf_hash: if set to true - will measure hash of the buf, >> + * instead of buf > > kernel doc requires a single line. In this case, please shorten the > argument definition to "measure buffer data or buffer data hash". The > details can be included in the longer function description. > Sounds good. Will do. >> + * >> + * A given kernel subsystem (event_data_source) may send >> + * data (buf) to be measured when the data or the subsystem state changes. >> + * The state/data change can be described by event_name. >> + * Examples of critical data (buf) could be kernel in-memory r/o structures, >> + * hash of the memory structures, or data that represents subsystem >> + * state change. >> + * measure_buf_hash can be used to save space, if the data being measured >> + * is too large. >> + * The data (buf) can only be measured, not appraised. >> + */ > > Please remove this longer function description, replacing it something > more appropriate. The subsequent patch that introduces the "data > source" parameter would expand the description. > > thanks, > > Mimi > *Question* Hi Mimi, will do. Do you want the data_source to be part of SeLinux patch? (patch 7/7 of this series). Or a separate patch before it? ~Tushar >> +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 || !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, event_data_source, >> + measure_buf_hash); >> +} >> + >> static int __init init_ima(void) >> { >> int error;