Received: by 2002:a05:6602:2086:0:0:0:0 with SMTP id a6csp3566427ioa; Tue, 26 Apr 2022 06:13:22 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwtGe6BlGaVxy5LIn9lkRykItE1wCw9CYEpdNfR9jUeSMQztDa5rY7R9pRI+t8Rrg8FjhsG X-Received: by 2002:a05:6402:84e:b0:422:b76c:bef8 with SMTP id b14-20020a056402084e00b00422b76cbef8mr24950461edz.238.1650978802140; Tue, 26 Apr 2022 06:13:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1650978802; cv=none; d=google.com; s=arc-20160816; b=Wv/dWPxQ2g9DZWy39qwV0Rjv2hOwN08azRi7FevRXP/lXNjX1lrpzSZrcDdkdM4oMJ OXK98QMcBwmjbh3mB9m5gFVpdYJJpF7/csDwzNk11D3zyaXojvad8T/3M56z9PwuoIcr sa3HitsjtUgATv4xX8dZFKqADm9GIn9ngkXtSwvHh5fikXJbt2xMLbTMBm0M+KMPHhC6 D/vQ7hPXSUgv8x+pX3QZALs7+D3FKPNB5yJEi1HHSlt/qbGdtbFNjWyb706jEkZBlNOe X0MFClzCU7I92CInZGK8yN4F+velntXWUP5ghyg3upv2lVnytKZIIf2or3JmyXfnCGkJ ZfMg== 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 :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=x0ZaEAIZRfY3TXnaiCeg2Im/5REFBepeu9hIAwpHFEg=; b=dVj3O+qjsgRZ4gkDIZ1ZjaLSONo9adN/DQhgYwDQpnEKr5n6N/Qz0V7VmyHC5QNpKV aWMqGEWIxIU1OI70apl+pKkSHrkBWO7hg7SkweafZoGKMlaAjkuOGjqCwsmj8EOEhGuD ozeccHIy+WL5hxnskgcn9E8L8SqBlLfi578zRGF/H31XpjR35XijFVxSMIOmqj3/rA79 kZzCgvhXRiwR4D1kCwCV1cQt7VFoYGvBQ1C8DdVRW/kaUqcmNJWvuLJj4aJA+LeUX6Le MPDaDSWhB4C6EorL9ENTeCVOYXpoKFp9SVgoLFMZ5bEYhuy9056/f6c+qt5oC87KaAFn KYIA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@zx2c4.com header.s=20210105 header.b=SQ4KGuFb; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zx2c4.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id k16-20020a1709062a5000b006df76385c62si15085365eje.258.2022.04.26.06.12.44; Tue, 26 Apr 2022 06:13:22 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@zx2c4.com header.s=20210105 header.b=SQ4KGuFb; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=zx2c4.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345739AbiDZI47 (ORCPT + 99 others); Tue, 26 Apr 2022 04:56:59 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56496 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345867AbiDZIoP (ORCPT ); Tue, 26 Apr 2022 04:44:15 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C0D5515CED7; Tue, 26 Apr 2022 01:33:47 -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 3DBE8B81A2F; Tue, 26 Apr 2022 08:33:46 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 27968C385AF; Tue, 26 Apr 2022 08:33:44 +0000 (UTC) Authentication-Results: smtp.kernel.org; dkim=pass (1024-bit key) header.d=zx2c4.com header.i=@zx2c4.com header.b="SQ4KGuFb" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=zx2c4.com; s=20210105; t=1650962021; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=x0ZaEAIZRfY3TXnaiCeg2Im/5REFBepeu9hIAwpHFEg=; b=SQ4KGuFbwAXPLahgY7AhuqoWeqFloOr+hAIIPGiVl/7Ha8CRUcIy9PK+LUlx1JkJKU5Scg yNlAZSNm+bmpas2sdxXJdZOvHJ2Q4LFMy+jAoS/PGdURyR0DHb5rONd6poB8+S0rnUuLwE /i2Y2OWkI9Jy/YZc/LejjzK5jCMUIy8= Received: by mail.zx2c4.com (ZX2C4 Mail Server) with ESMTPSA id e397a466 (TLSv1.3:AEAD-AES256-GCM-SHA384:256:NO); Tue, 26 Apr 2022 08:33:41 +0000 (UTC) From: "Jason A. Donenfeld" To: linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org, tglx@linutronix.de, bp@alien8.de Cc: "Jason A. Donenfeld" , Arnd Bergmann , x86@kernel.org Subject: [PATCH v7 13/17] x86/asm: use fallback for random_get_entropy() instead of zero Date: Tue, 26 Apr 2022 10:33:01 +0200 Message-Id: <20220426083301.816458-1-Jason@zx2c4.com> In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, RCVD_IN_DNSWL_HI,SPF_HELO_NONE,SPF_PASS autolearn=ham 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-crypto@vger.kernel.org In the event that random_get_entropy() can't access a cycle counter or similar, falling back to returning 0 is suboptimal. Instead, fallback to calling random_get_entropy_fallback(), which isn't extremely high precision or guaranteed to be entropic, but is certainly better than returning zero all the time. If CONFIG_X86_TSC=n, then it's possible for the kernel to run on systems without RDTSC, such as 486 and certain 586, so the fallback code is only required for that case. As well, fix up both the new function and the get_cycles() function from which it was derived to use cpu_feature_enabled() rather than boot_cpu_has(), and use !IS_ENABLED() instead of #ifndef. Cc: Thomas Gleixner Cc: Arnd Bergmann Cc: Borislav Petkov Cc: x86@kernel.org Signed-off-by: Jason A. Donenfeld --- Changes v6->v7: - Adjust commit subject and body to match tip commit style. - Use !IS_ENABLED() instead of #ifndef. arch/x86/include/asm/timex.h | 9 +++++++++ arch/x86/include/asm/tsc.h | 7 +++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/arch/x86/include/asm/timex.h b/arch/x86/include/asm/timex.h index a4a8b1b16c0c..956e4145311b 100644 --- a/arch/x86/include/asm/timex.h +++ b/arch/x86/include/asm/timex.h @@ -5,6 +5,15 @@ #include #include +static inline unsigned long random_get_entropy(void) +{ + if (!IS_ENABLED(CONFIG_X86_TSC) && + !cpu_feature_enabled(X86_FEATURE_TSC)) + return random_get_entropy_fallback(); + return rdtsc(); +} +#define random_get_entropy random_get_entropy + /* Assume we use the PIT time source for the clock tick */ #define CLOCK_TICK_RATE PIT_TICK_RATE diff --git a/arch/x86/include/asm/tsc.h b/arch/x86/include/asm/tsc.h index 01a300a9700b..fbdc3d951494 100644 --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h @@ -20,13 +20,12 @@ extern void disable_TSC(void); static inline cycles_t get_cycles(void) { -#ifndef CONFIG_X86_TSC - if (!boot_cpu_has(X86_FEATURE_TSC)) + if (!IS_ENABLED(CONFIG_X86_TSC) && + !cpu_feature_enabled(X86_FEATURE_TSC)) return 0; -#endif - return rdtsc(); } +#define get_cycles get_cycles extern struct system_counterval_t convert_art_to_tsc(u64 art); extern struct system_counterval_t convert_art_ns_to_tsc(u64 art_ns); -- 2.35.1