Received: by 2002:ac0:bc90:0:0:0:0:0 with SMTP id a16csp1605392img; Tue, 19 Mar 2019 11:16:01 -0700 (PDT) X-Google-Smtp-Source: APXvYqx0xLetdYa959uVl+f7nbp5XckYLWevHZJz/7luD/ZSw8snidabC3oE8BoOj64+KlG8EOG5 X-Received: by 2002:a17:902:8d89:: with SMTP id v9mr27360601plo.254.1553019361852; Tue, 19 Mar 2019 11:16:01 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1553019361; cv=none; d=google.com; s=arc-20160816; b=J/VOpF3ykluD2hdY16OWVhHHJrO14vVdOPKxPnxvG8Aq7/cIy2WGniGGsZ+s6gtPAg ZF6s/7hdHrtXvWAg7NnYn7X+vU5j+9onS4EKnaKwNb9Br18LM6EOhDgJUg9BvPIVSGNu g9vVLHFRftAR20JxTzYWPRycBSeQHiNtIB5WjCDDE8laQ+EAkMb7zVo+C0/EynQMLGgH VxaY7L/xVnDCBsjfW5zxPfHviBHie58aXRDA3Fta+IVx5o3ZTdoazEYg0smB/JE6E15B 2ETNWuB9NttKDaDQ/zXqrJ29ILUo8ZOKz72zzs2v8MAY5oTZaRdUD+ofsxFhES65zaIs b8NA== 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; bh=PhtLZAflTBpv/0hNS++H3rlEaYo0wpChhc0PYtEnbgA=; b=duxNp/zcNYSPKXZafrtwFnoyq1eMfLQuyaJ8A3QE8LvizFNdF6Q7Q7gWP2+ooPOc0X 3+S5MfzvAunXpL2N3oGE5/RNOhot6E9arTtufHgi0Q9gp8AYbg9g4iQRgHV7fEw2yE4+ 3wVKq8VjvMqDzCJmwBeP7z8nZzX5RO5yitj+t/Jqi/H0K+Ou3plkn3fFHVKHJkEPnhol ucv8M4II6NPxasEaxieLW7pTPNJGzq2TfBWoyKs4GM1G8tKvbOJ3hZVPn62CYgJSI7Ni L514xZarOQoci0o6jPQLo8Nr3Eo46gNnoYWH+CSNZSG0X+AeSKD3lJQOAS23wbnQdkTR XzoQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t11si5367965plo.92.2019.03.19.11.15.45; Tue, 19 Mar 2019 11:16:01 -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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727766AbfCSSOq (ORCPT + 99 others); Tue, 19 Mar 2019 14:14:46 -0400 Received: from pinero.vault24.org ([69.164.212.126]:48300 "EHLO pinero.vault24.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727139AbfCSSOq (ORCPT ); Tue, 19 Mar 2019 14:14:46 -0400 X-Greylist: delayed 363 seconds by postgrey-1.27 at vger.kernel.org; Tue, 19 Mar 2019 14:14:46 EDT Received: from feynman.vault24.org (feynman.vault24.org [IPv6:2001:470:1f11:7b5::14]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by pinero.vault24.org (Postfix) with ESMTPS id 9A7D0603D; Tue, 19 Mar 2019 14:08:42 -0400 (EDT) Received: by feynman.vault24.org (Postfix, from userid 1000) id DE566302DD18; Tue, 19 Mar 2019 14:08:41 -0400 (EDT) From: Jon DeVree To: linux-kernel@vger.kernel.org Cc: tytso@mit.edu, Jason@zx2c4.com, Jon DeVree Subject: [PATCH] random: fix CRNG initialization when random.trust_cpu=1 Date: Tue, 19 Mar 2019 13:28:47 -0400 Message-Id: <20190319172846.30741-1-nuxi@vault24.org> X-Mailer: git-send-email 2.20.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 When the system boots with random.trust_cpu=1 it doesn't initialize the per-NUMA CRNGs because it skips the rest of the CRNG startup code. This means that the code from 1e7f583af67b ("random: make /dev/urandom scalable for silly userspace programs") is not used when random.trust_cpu=1. crash> dmesg | grep random: [ 0.000000] random: get_random_bytes called from start_kernel+0x94/0x530 with crng_init=0 [ 0.314029] random: crng done (trusting CPU's manufacturer) crash> print crng_node_pool $6 = (struct crng_state **) 0x0 After adding the missing call to numa_crng_init() the per-NUMA CRNGs are initialized again: crash> dmesg | grep random: [ 0.000000] random: get_random_bytes called from start_kernel+0x94/0x530 with crng_init=0 [ 0.314031] random: crng done (trusting CPU's manufacturer) crash> print crng_node_pool $1 = (struct crng_state **) 0xffff9a915f4014a0 The call to invalidate_batched_entropy() was also missing. This is important for architectures like PPC and S390 which only have the arch_get_random_seed_* functions. Fixes: 39a8883a2b98 ("random: add a config option to trust the CPU's hwrng") Signed-off-by: Jon DeVree --- drivers/char/random.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/drivers/char/random.c b/drivers/char/random.c index 38c6d1af6d1c..d4d45ccfeefc 100644 --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -777,6 +777,7 @@ static struct crng_state **crng_node_pool __read_mostly; #endif static void invalidate_batched_entropy(void); +static void numa_crng_init(void); static bool trust_cpu __ro_after_init = IS_ENABLED(CONFIG_RANDOM_TRUST_CPU); static int __init parse_trust_cpu(char *arg) @@ -805,7 +806,9 @@ static void crng_initialize(struct crng_state *crng) } crng->state[i] ^= rv; } - if (trust_cpu && arch_init) { + if (trust_cpu && arch_init && crng == &primary_crng) { + invalidate_batched_entropy(); + numa_crng_init(); crng_init = 2; pr_notice("random: crng done (trusting CPU's manufacturer)\n"); } -- 2.20.1