From patchwork Fri Aug 25 15:50:16 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ard Biesheuvel X-Patchwork-Id: 111036 Delivered-To: patch@linaro.org Received: by 10.140.95.78 with SMTP id h72csp1220542qge; Fri, 25 Aug 2017 09:00:34 -0700 (PDT) X-Received: by 10.99.39.135 with SMTP id n129mr10258527pgn.36.1503676833894; Fri, 25 Aug 2017 09:00:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1503676833; cv=none; d=google.com; s=arc-20160816; b=KKsSv2IzSv2SqTvoOh4b1g9hkjv0ls6jI5BdEmmAQy5oSGvGh/t+1cttuF4qNwAYQA NWrQCYbsCEy5TPBt/fh4VMo3nXkbGc10nJfN6G6nN6t5cdxUHsxn0wYfbnvtrRofrJE8 G1IQioJpJ+J02zFq6HXizLeOuVrTm4jI1VLDF8vU81lgAUVsD46oiqM40pNfoO4SKouT MXZ+jts9Mg5JOBKCYjbai6iQbMsFAhz0ZwE0jAp9FkoM3x0LfdqY3g5yu5h6AQWSAwEc CMjzQ4CXw1fpmkSWV5BqrQcGcwTz2Fbt0DPipjTrvokkKD3qg2i8fRBtJXJe1utmqHQd JU+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=Wyuy/mlIDfntK6vu6GmgfJkBQ34Jcu17erRIovoJoeo=; b=TUFmF7Wdy2ckYz1yffBSEDZ7mAZW728vlKGLhuCnaOnisn92IiJnhBkbrRiRJUwWbW WCpaGatmWc2N32+tG7jFKMO7u+CR2FCMl/2HmUsUmAylromfcxVqWfqSeRC1G69dzP0y dTgiHgeSe5hix0RhScSDWSm9/PCIbvYj2Ts6Pk3y3ES6tN/DJI2wBSvaIChq4hEn6g7A 0LwCQIWXvBsC+BEmdV868HDjG1HUtkqm4ZVSVn0d3ySzJ6xyoCYcc3ZBZkIXlIpY3aBB gZM/87sX7gn/V39+I5jgkmLnhni+XZo34HdSzk43cqx+ARsmMN7LT3foi1MR4xV+tocN h0/Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=hL1ynxN/; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id e6si4846786pgp.440.2017.08.25.09.00.32; Fri, 25 Aug 2017 09:00:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b=hL1ynxN/; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934162AbdHYQAa (ORCPT + 26 others); Fri, 25 Aug 2017 12:00:30 -0400 Received: from mail-wr0-f182.google.com ([209.85.128.182]:37476 "EHLO mail-wr0-f182.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934093AbdHYP7b (ORCPT ); Fri, 25 Aug 2017 11:59:31 -0400 Received: by mail-wr0-f182.google.com with SMTP id a47so623130wra.4 for ; Fri, 25 Aug 2017 08:59:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=Wyuy/mlIDfntK6vu6GmgfJkBQ34Jcu17erRIovoJoeo=; b=hL1ynxN/jam1cOBU1cV1a7liBWDsvhTa8l4INlr8brTfQeiLblkNz8eD02yxZSrJhw TpiR2S69REI498txVJ3VwtNeDLY7c0l5iEnoF98V/f3MClNpTKSe/5pGkbBzCOs7YD3s 4oNtABEIoMIQtxxQZEEIc6sMTgfvElgRr8n+o= 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:in-reply-to :references; bh=Wyuy/mlIDfntK6vu6GmgfJkBQ34Jcu17erRIovoJoeo=; b=hRNjz2OFF0GoJLzwDfpemkocPOLy4QxxnF2633MJ6A+mKRl93pR9owPrsKzEohCTkv L3CNqNwRoDSXSSIa8vSD5nJqgCXzz2/hKzSQGR4+IQYpVDgSYMkoX/XUzoyCKCmtc2J8 pKcsH9XPXW71obPbD7Kv1r9Vp8zZqhIQzknABM6mSA7dSbuV5conZeE5HdA5RbQQJT4Z JTIYPZ0aG0WSXdOPDUvO+oOzlglc84iquxI85Wa8F9Yr0me7IHd3vXJlS9Vo6bhk/TOV oITkFXuo4ZxRmTpOtWTUkwexFJGZquqKk885HKN8pmcIMkEWp7hdJZI4Fwg36+6kwVZJ gRgQ== X-Gm-Message-State: AHYfb5iNJSTiDNARmalr/aPSDekJgFx3zvwFBp3ZldSjxB7aP3i0AA+A kxpab0ocQBR583aM X-Received: by 10.223.175.21 with SMTP id z21mr7543783wrc.145.1503676769986; Fri, 25 Aug 2017 08:59:29 -0700 (PDT) Received: from localhost.localdomain ([105.137.125.182]) by smtp.gmail.com with ESMTPSA id b96sm14507757wrd.94.2017.08.25.08.59.27 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 25 Aug 2017 08:59:29 -0700 (PDT) From: Ard Biesheuvel To: linux-efi@vger.kernel.org, Ingo Molnar , Thomas Gleixner , "H . Peter Anvin" Cc: Ard Biesheuvel , linux-kernel@vger.kernel.org, Matt Fleming Subject: [PATCH 2/5] efi/random: Increase size of firmware supplied randomness Date: Fri, 25 Aug 2017 16:50:16 +0100 Message-Id: <20170825155019.6740-3-ard.biesheuvel@linaro.org> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20170825155019.6740-1-ard.biesheuvel@linaro.org> References: <20170825155019.6740-1-ard.biesheuvel@linaro.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The crng code requires at least 64 bytes (2 * CHACHA20_BLOCK_SIZE) to complete the fast boot-time init, so provide that many bytes when invoking UEFI protocols to seed the entropy pool. Also, add a notice so we can tell from the boot log when the seeding actually took place. Cc: Matt Fleming Signed-off-by: Ard Biesheuvel --- drivers/firmware/efi/efi.c | 3 ++- drivers/firmware/efi/libstub/random.c | 10 ++++------ include/linux/efi.h | 2 ++ 3 files changed, 8 insertions(+), 7 deletions(-) -- 2.11.0 diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index 6519be44387c..9e822906adcb 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -522,6 +522,7 @@ int __init efi_config_parse_tables(void *config_tables, int count, int sz, if (seed != NULL) { add_device_randomness(seed->bits, seed->size); early_memunmap(seed, sizeof(*seed) + size); + pr_notice("seeding entropy pool\n"); } else { pr_err("Could not map UEFI random seed!\n"); } @@ -867,7 +868,7 @@ static int update_efi_random_seed(struct notifier_block *nb, seed = memremap(efi.rng_seed, sizeof(*seed), MEMREMAP_WB); if (seed != NULL) { - size = min(seed->size, 32U); + size = min(seed->size, EFI_RANDOM_SEED_SIZE); memunmap(seed); } else { pr_err("Could not map UEFI random seed!\n"); diff --git a/drivers/firmware/efi/libstub/random.c b/drivers/firmware/efi/libstub/random.c index 7e72954d5860..e0e603a89aa9 100644 --- a/drivers/firmware/efi/libstub/random.c +++ b/drivers/firmware/efi/libstub/random.c @@ -145,8 +145,6 @@ efi_status_t efi_random_alloc(efi_system_table_t *sys_table_arg, return status; } -#define RANDOM_SEED_SIZE 32 - efi_status_t efi_random_get_seed(efi_system_table_t *sys_table_arg) { efi_guid_t rng_proto = EFI_RNG_PROTOCOL_GUID; @@ -162,25 +160,25 @@ efi_status_t efi_random_get_seed(efi_system_table_t *sys_table_arg) return status; status = efi_call_early(allocate_pool, EFI_RUNTIME_SERVICES_DATA, - sizeof(*seed) + RANDOM_SEED_SIZE, + sizeof(*seed) + EFI_RANDOM_SEED_SIZE, (void **)&seed); if (status != EFI_SUCCESS) return status; - status = rng->get_rng(rng, &rng_algo_raw, RANDOM_SEED_SIZE, + status = rng->get_rng(rng, &rng_algo_raw, EFI_RANDOM_SEED_SIZE, seed->bits); if (status == EFI_UNSUPPORTED) /* * Use whatever algorithm we have available if the raw algorithm * is not implemented. */ - status = rng->get_rng(rng, NULL, RANDOM_SEED_SIZE, + status = rng->get_rng(rng, NULL, EFI_RANDOM_SEED_SIZE, seed->bits); if (status != EFI_SUCCESS) goto err_freepool; - seed->size = RANDOM_SEED_SIZE; + seed->size = EFI_RANDOM_SEED_SIZE; status = efi_call_early(install_configuration_table, &rng_table_guid, seed); if (status != EFI_SUCCESS) diff --git a/include/linux/efi.h b/include/linux/efi.h index 12e05118657c..8dc3d94a3e3c 100644 --- a/include/linux/efi.h +++ b/include/linux/efi.h @@ -1564,6 +1564,8 @@ efi_status_t efi_exit_boot_services(efi_system_table_t *sys_table, void *priv, efi_exit_boot_map_processing priv_func); +#define EFI_RANDOM_SEED_SIZE 64U + struct linux_efi_random_seed { u32 size; u8 bits[];