Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp2437805ioo; Sat, 28 May 2022 13:41:14 -0700 (PDT) X-Google-Smtp-Source: ABdhPJym1CtCc0LzHnYP35YqCqzrC9ml+rDnoPZMU+veEeY8ymJwM0M82Bnw0E29ND3Q1oq3u7Wn X-Received: by 2002:a17:90a:7e02:b0:1e0:a6a7:6eb with SMTP id i2-20020a17090a7e0200b001e0a6a706ebmr14991989pjl.203.1653770474212; Sat, 28 May 2022 13:41:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653770474; cv=none; d=google.com; s=arc-20160816; b=uGn+DqDTvZAh4f4DCAkF5ewiYfSMS4Augk+lcKXsclMZQSgCn+f5Mz2QelZHkejsGk zy34GiyjIXKYjp31g2+r11KC5A3xFavpP/xNJQTA78moG9Jo2M0Kz12HhopKtlLAcn7a 6fCQMx2fb2jsssa6Pdmn9tjE9s1lXBOQ7Nt7483kJZpVDoX1pXvLTL7ChQkDC+iXbD31 uMomrZHHkaF3UuqUMqONFa28hw5NDO8dcnSGItt/PpzhBTiKBg7Kr1QoZvU3IqjEkCA9 EDQlC7D49FeCQbkr6GkWyyeHA667DCV1hPV0ZfoA0Zm3K/1mLAFCIkv+z9PmZwgnZXQd Q4Ag== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=yUAAyqSUHhzcwYcP3kI/7tVFXHdP73WwgqmhpKz6Z8M=; b=iXhoGwNaUgs0VcJUbmKcDqBGBHlKJnYIotUJtOYI3Da82iKsCCSX8wbx0CTn/UCDcH fmf/MYflq/NQgaG3hUX6JswpvLH2YWZCKZps0Sg22jpYPpeuDNOe0pNFs888PmyXJScv VYC8vV/2U3F7dwEn//TzRL7ei7+oghiCzQMf2DC5Sx6cIAEjiNaBoYyO2XB0tzmsAAlM l5BQHfsgSbqGZnu3ZwOQh5XIZ1maHqebMIgEm06J65k66DyfrQ/oH0q+jUVj28lOtOLo NmPnzYIeJGa6HYhx8LvN7/NKuCIGG6l6Su/rInasE8vYy8HbwBV1VEsiS2QHkxM8TKxe /rXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=UQRSsTAj; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id i5-20020a17090a2ac500b001d78a805abcsi6749672pjg.106.2022.05.28.13.41.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 28 May 2022 13:41:14 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=UQRSsTAj; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 44B7A18A87F; Sat, 28 May 2022 12:46:35 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1351937AbiE0LzC (ORCPT + 99 others); Fri, 27 May 2022 07:55:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40386 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352552AbiE0Lue (ORCPT ); Fri, 27 May 2022 07:50:34 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 3F02715350F; Fri, 27 May 2022 04:44:49 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ams.source.kernel.org (Postfix) with ESMTPS id B200BB824DD; Fri, 27 May 2022 11:44:47 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id EC02CC385A9; Fri, 27 May 2022 11:44:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1653651886; bh=XxK0OtvwNhgUMCOyhriJ/+qNy/K+HjGgOW3wfyCgR3A=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=UQRSsTAjTWeY1zPLwxjXovycztF++NMEBywwsEnhcN3GKemdv9+lru7nYcPKFF1bC 0R/e3dZZn9uaaTvt2cTjHErXyEMYnQhmVTnN3RHiwIH9Kr7oPlSRtzMEpx9RKiBAmt iWw8naPP187ytx5tr4NqznS48IlWgygBiCdawkh8= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Theodore Tso , Dominik Brodowski , Eric Biggers , "Jason A. Donenfeld" Subject: [PATCH 5.10 067/163] random: ensure early RDSEED goes through mixer on init Date: Fri, 27 May 2022 10:49:07 +0200 Message-Id: <20220527084837.297905410@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220527084828.156494029@linuxfoundation.org> References: <20220527084828.156494029@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: "Jason A. Donenfeld" commit a02cf3d0dd77244fd5333ac48d78871de459ae6d upstream. Continuing the reasoning of "random: use RDSEED instead of RDRAND in entropy extraction" from this series, at init time we also don't want to be xoring RDSEED directly into the crng. Instead it's safer to put it into our entropy collector and then re-extract it, so that it goes through a hash function with preimage resistance. As a matter of hygiene, we also order these now so that the RDSEED byte are hashed in first, followed by the bytes that are likely more predictable (e.g. utsname()). Cc: Theodore Ts'o Reviewed-by: Dominik Brodowski Reviewed-by: Eric Biggers Signed-off-by: Jason A. Donenfeld Signed-off-by: Greg Kroah-Hartman --- drivers/char/random.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) --- a/drivers/char/random.c +++ b/drivers/char/random.c @@ -1208,24 +1208,18 @@ int __init rand_initialize(void) bool arch_init = true; unsigned long rv; - mix_pool_bytes(&now, sizeof(now)); for (i = BLAKE2S_BLOCK_SIZE; i > 0; i -= sizeof(rv)) { - if (!arch_get_random_seed_long(&rv) && - !arch_get_random_long(&rv)) - rv = random_get_entropy(); - mix_pool_bytes(&rv, sizeof(rv)); - } - mix_pool_bytes(utsname(), sizeof(*(utsname()))); - - extract_entropy(&primary_crng.state[4], sizeof(u32) * 12); - for (i = 4; i < 16; i++) { if (!arch_get_random_seed_long_early(&rv) && !arch_get_random_long_early(&rv)) { rv = random_get_entropy(); arch_init = false; } - primary_crng.state[i] ^= rv; + mix_pool_bytes(&rv, sizeof(rv)); } + mix_pool_bytes(&now, sizeof(now)); + mix_pool_bytes(utsname(), sizeof(*(utsname()))); + + extract_entropy(&primary_crng.state[4], sizeof(u32) * 12); if (arch_init && trust_cpu && crng_init < 2) { invalidate_batched_entropy(); crng_init = 2;