Received: by 2002:a25:e74b:0:0:0:0:0 with SMTP id e72csp2499355ybh; Fri, 24 Jul 2020 14:39:48 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw2A5fu3HFKpP0+DpKBO7RIfJZjia/NV4vE6l8A+xBi+jgMd8NO+TjW3fXjxPoC1ChVFJwR X-Received: by 2002:a17:906:22c1:: with SMTP id q1mr2275396eja.443.1595626788120; Fri, 24 Jul 2020 14:39:48 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1595626788; cv=none; d=google.com; s=arc-20160816; b=tHYHpEVqal64LP5C9MpdWRtRkMpJxmHQYcJpDlqUKrHmhRV/pfR/Dq1NNDetrwVvxD WLAO8ukOnWf+ytEZ392A7/MOsQDUed2SgWIHX9BzrFAcjrN6WUq3CMEfEWopRWUA/FZ0 vEoMwWJYQyHEwvzcSfDVe9xMRJ1Gn1UTrQslKonJhYpN+ruvWqL1t6kwVNrC084k1m9O uc6krumU1OpV6bZPvU3AUoX4Z4ijA9azZJT3RWK8iK5jxCGbFSya76J4HCjCSRkuCdx9 L+WikZY4z1sC64RA8nqQdfhGCAQM6tSfLuhpAtB5zae0k5xVn8KGFvoriP6bAPfbOuGy 6bjg== 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:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=QuSR5OKebfZG9zBTcnsVSNOUx+p1wthou5r7P45Dqng=; b=XcKU3c9qHedvUq2tHXtiNdc+MWFDpywIn8KwY+6divsshh3tJbO+sIobNZNDBWLgBs Rfy3h73T69UWf5wmn4mzZR7XEMtx96NgsEkq9MMnQEZp8ixW5W4BCiTET511o+0Qzdat jS2dV8+zU3zlbtcqtrNAtQ5A3+7Q3zqTr1KU1jCumPTTj4dBY/N/APgGGX9H/n95gHKW zSn9uyf8KB8M2spFy93m/7xVyJL3zCDRLPP5Sw0L2+83GNt6H2RLGVDgxYcUGcyCC+Sx esaviqc1MltRpYIOIu9196/HVQsGDaMD/EjiJuq6k3WYrWg9wRsOxu7uLgnQeE9j/fj5 X0Sg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="e2g/T7ES"; 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=chromium.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id y16si1386435edq.189.2020.07.24.14.39.24; Fri, 24 Jul 2020 14:39:48 -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=@chromium.org header.s=google header.b="e2g/T7ES"; 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=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727942AbgGXVil (ORCPT + 99 others); Fri, 24 Jul 2020 17:38:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57754 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726643AbgGXVgq (ORCPT ); Fri, 24 Jul 2020 17:36:46 -0400 Received: from mail-pg1-x544.google.com (mail-pg1-x544.google.com [IPv6:2607:f8b0:4864:20::544]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D0AB9C03CA40 for ; Fri, 24 Jul 2020 14:36:45 -0700 (PDT) Received: by mail-pg1-x544.google.com with SMTP id k27so6147889pgm.2 for ; Fri, 24 Jul 2020 14:36:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=QuSR5OKebfZG9zBTcnsVSNOUx+p1wthou5r7P45Dqng=; b=e2g/T7ESZvOK2o3dhi05Vn3Jsik1P7GtuHpRHV97nJhR9chmHD3goRnMyfoRIvXkpJ NotPjBIoK9R7ayTLCq5EVGqMimLDdpJZE8JgRudIQ2sj3I259P0AVctQODLLRz2Z1kAe FBmH2mq4JZ0WMzHPmHsazvYGXFK3T17zub/5o= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=QuSR5OKebfZG9zBTcnsVSNOUx+p1wthou5r7P45Dqng=; b=jPSQ1JBbWgizYHA7H00+gRm/2bhWD1WJdC1aakRYWxFPoAGGitDK792DF+5E/qTQjU DDfyiLA98Fa4hPInotahym3SkhmWqC81EuKPOfG5a21ZTRDIemAoo1rRfKdxXnDLLxVZ LL9cpDlxAPzeLrHHzct3cvLWsPEDdUnAqQn93w2D7jhurYC71S6bEooRkJ95438XPFq/ iYTjTBdL/32wYxTFgckMBnpu0D6TLBWD7Kw+BGw4FUUBl3HLaJWd0CyV5cTRLptQUdDq aLcJa1TGtHQlTSiw8m9MMtJc4w9IwN4/x4bQWDX/DkzZIevBoYhoFTpXVoNXXfbpPJZB XYiQ== X-Gm-Message-State: AOAM531lICHYjM7nRyxIQ9I2ruuNbs5zgxVyr7RHeDYxQ8ElPZevOUHm 3dEYG4mL27ThcVOa2D4RaCYMBw== X-Received: by 2002:a65:6119:: with SMTP id z25mr10602187pgu.52.1595626605323; Fri, 24 Jul 2020 14:36:45 -0700 (PDT) Received: from www.outflux.net (smtp.outflux.net. [198.145.64.163]) by smtp.gmail.com with ESMTPSA id 19sm7331534pfy.193.2020.07.24.14.36.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 24 Jul 2020 14:36:43 -0700 (PDT) From: Kees Cook To: Greg Kroah-Hartman Cc: Kees Cook , Scott Branden , Mimi Zohar , Luis Chamberlain , Jessica Yu , SeongJae Park , KP Singh , linux-efi@vger.kernel.org, linux-security-module@vger.kernel.org, linux-integrity@vger.kernel.org, selinux@vger.kernel.org, linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 00/19] Introduce partial kernel_read_file() support Date: Fri, 24 Jul 2020 14:36:21 -0700 Message-Id: <20200724213640.389191-1-keescook@chromium.org> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org v3: - add reviews/acks - add "IMA: Add support for file reads without contents" patch - trim CC list, in case that's why vger ignored v2 v2: [missing from lkml archives! (CC list too long?) repeating changes here] - fix issues in firmware test suite - add firmware partial read patches - various bug fixes/cleanups v1: https://lore.kernel.org/lkml/20200717174309.1164575-1-keescook@chromium.org/ Hi, Here's my tree for adding partial read support in kernel_read_file(), which fixes a number of issues along the way. It's got Scott's firmware and IMA patches ported and everything tests cleanly for me (even with CONFIG_IMA_APPRAISE=y). I think the intention is for this to go via Greg's tree since Scott's driver code will depend on it? Thanks, -Kees Kees Cook (15): test_firmware: Test platform fw loading on non-EFI systems selftest/firmware: Add selftest timeout in settings firmware_loader: EFI firmware loader must handle pre-allocated buffer fs/kernel_read_file: Remove FIRMWARE_PREALLOC_BUFFER enum fs/kernel_read_file: Remove FIRMWARE_EFI_EMBEDDED enum fs/kernel_read_file: Split into separate source file fs/kernel_read_file: Remove redundant size argument fs/kernel_read_file: Switch buffer size arg to size_t fs/kernel_read_file: Add file_size output argument LSM: Introduce kernel_post_load_data() hook firmware_loader: Use security_post_load_data() module: Call security_kernel_post_load_data() LSM: Add "contents" flag to kernel_read_file hook fs/kernel_file_read: Add "offset" arg for partial reads firmware: Store opt_flags in fw_priv Scott Branden (4): fs/kernel_read_file: Split into separate include file IMA: Add support for file reads without contents firmware: Add request_partial_firmware_into_buf() test_firmware: Test partial read support drivers/base/firmware_loader/fallback.c | 19 +- drivers/base/firmware_loader/fallback.h | 5 +- .../base/firmware_loader/fallback_platform.c | 16 +- drivers/base/firmware_loader/firmware.h | 7 +- drivers/base/firmware_loader/main.c | 143 ++++++++++--- drivers/firmware/efi/embedded-firmware.c | 21 +- drivers/firmware/efi/embedded-firmware.h | 19 ++ fs/Makefile | 3 +- fs/exec.c | 132 +----------- fs/kernel_read_file.c | 189 ++++++++++++++++++ include/linux/efi_embedded_fw.h | 13 -- include/linux/firmware.h | 12 ++ include/linux/fs.h | 39 ---- include/linux/ima.h | 19 +- include/linux/kernel_read_file.h | 55 +++++ include/linux/lsm_hook_defs.h | 6 +- include/linux/lsm_hooks.h | 12 ++ include/linux/security.h | 19 +- kernel/kexec.c | 2 +- kernel/kexec_file.c | 19 +- kernel/module.c | 24 ++- lib/test_firmware.c | 159 +++++++++++++-- security/integrity/digsig.c | 8 +- security/integrity/ima/ima_fs.c | 10 +- security/integrity/ima/ima_main.c | 70 +++++-- security/integrity/ima/ima_policy.c | 1 + security/loadpin/loadpin.c | 17 +- security/security.c | 26 ++- security/selinux/hooks.c | 8 +- .../selftests/firmware/fw_filesystem.sh | 91 +++++++++ tools/testing/selftests/firmware/settings | 8 + tools/testing/selftests/kselftest/runner.sh | 6 +- 32 files changed, 860 insertions(+), 318 deletions(-) create mode 100644 drivers/firmware/efi/embedded-firmware.h create mode 100644 fs/kernel_read_file.c create mode 100644 include/linux/kernel_read_file.h create mode 100644 tools/testing/selftests/firmware/settings -- 2.25.1