Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754519AbcJUCpV (ORCPT ); Thu, 20 Oct 2016 22:45:21 -0400 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:60407 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752497AbcJUCpR (ORCPT ); Thu, 20 Oct 2016 22:45:17 -0400 From: Thiago Jung Bauermann To: linux-security-module Cc: Mimi Zohar , "Eric W. Biederman" , linux-ima-devel@lists.sourceforge.net, Dave Young , kexec@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Andrew Morton , Thiago Jung Bauermann Subject: [PATCH v6 00/10] ima: carry the measurement list across kexec Date: Fri, 21 Oct 2016 00:44:48 -0200 X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 16102102-0024-0000-0000-0000011A5581 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 16102102-0025-0000-0000-000015D4709A Message-Id: <1477017898-10375-1-git-send-email-bauerman@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2016-10-21_01:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1609300000 definitions=main-1610210048 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 4824 Lines: 109 Hello, This is just a rebase on top of kexec_file_load patches v9 which I just posted. The previous version of this series has some conflicts with it. Original cover letter: The TPM PCRs are only reset on a hard reboot. In order to validate a TPM's quote after a soft reboot (eg. kexec -e), the IMA measurement list of the running kernel must be saved and then restored on the subsequent boot, possibly of a different architecture. The existing securityfs binary_runtime_measurements file conveniently provides a serialized format of the IMA measurement list. This patch set serializes the measurement list in this format and restores it. Up to now, the binary_runtime_measurements was defined as architecture native format. The assumption being that userspace could and would handle any architecture conversions. With the ability of carrying the measurement list across kexec, possibly from one architecture to a different one, the per boot architecture information is lost and with it the ability of recalculating the template digest hash. To resolve this problem, without breaking the existing ABI, this patch set introduces the boot command line option "ima_canonical_fmt", which is arbitrarily defined as little endian. The need for this boot command line option will be limited to the existing version 1 format of the binary_runtime_measurements. Subsequent formats will be defined as canonical format (eg. TPM 2.0 support for larger digests). A simplified method of Thiago Bauermann's "kexec buffer handover" patch series for carrying the IMA measurement list across kexec is included in this patch set. The simplified method requires all file measurements be taken prior to executing the kexec load, as subsequent measurements will not be carried across the kexec and restored. Changelog v6: - Rebased on top of "kexec_file_load implementation for PowerPC" patches v9. Changelog v5: - Included patches from Thiago Bauermann's "kexec buffer handover" patch series for carrying the IMA measurement list across kexec. - Added CONFIG_HAVE_IMA_KEXEC - Renamed functions to variations of ima_kexec_buffer instead of variations of kexec_handover_buffer Changelog v4: - Fixed "spinlock bad magic" BUG - reported by Dmitry Vyukov - Rebased on Thiago Bauermann's v5 patch set - Removed the skip_checksum initialization Changelog v3: - Cleaned up the code for calculating the requested kexec segment size needed for the IMA measurement list, limiting the segment size to half of the totalram_pages. - Fixed kernel test robot reports as enumerated in the respective patch changelog. Changelog v2: - Canonical measurement list support added - Redefined the ima_kexec_hdr struct to use well defined sizes Andreas Steffen (1): ima: platform-independent hash value Mimi Zohar (7): ima: on soft reboot, restore the measurement list ima: permit duplicate measurement list entries ima: maintain memory size needed for serializing the measurement list ima: on soft reboot, save the measurement list ima: store the builtin/custom template definitions in a list ima: support restoring multiple template formats ima: define a canonical binary_runtime_measurements list format Thiago Jung Bauermann (2): powerpc: ima: Get the kexec buffer passed by the previous kernel powerpc: ima: Send the kexec buffer to the next kernel Documentation/kernel-parameters.txt | 4 + arch/Kconfig | 3 + arch/powerpc/Kconfig | 1 + arch/powerpc/include/asm/ima.h | 29 +++ arch/powerpc/include/asm/kexec.h | 15 +- arch/powerpc/kernel/Makefile | 4 + arch/powerpc/kernel/ima_kexec.c | 223 +++++++++++++++++++++ arch/powerpc/kernel/kexec_elf_64.c | 2 +- arch/powerpc/kernel/machine_kexec_file_64.c | 15 +- include/linux/ima.h | 12 ++ kernel/kexec_file.c | 4 + security/integrity/ima/Kconfig | 12 ++ security/integrity/ima/Makefile | 1 + security/integrity/ima/ima.h | 31 +++ security/integrity/ima/ima_crypto.c | 6 +- security/integrity/ima/ima_fs.c | 30 ++- security/integrity/ima/ima_init.c | 2 + security/integrity/ima/ima_kexec.c | 168 ++++++++++++++++ security/integrity/ima/ima_main.c | 1 + security/integrity/ima/ima_queue.c | 76 +++++++- security/integrity/ima/ima_template.c | 293 ++++++++++++++++++++++++++-- security/integrity/ima/ima_template_lib.c | 7 +- 22 files changed, 901 insertions(+), 38 deletions(-) create mode 100644 arch/powerpc/include/asm/ima.h create mode 100644 arch/powerpc/kernel/ima_kexec.c create mode 100644 security/integrity/ima/ima_kexec.c -- 2.7.4