Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp6147584iog; Thu, 23 Jun 2022 12:19:36 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sSZJrxPlRs78GIo5lIAVrrZ56l5C+7vtWoGIQKtzUQ/VYuun3NhH85oT6lK1vcZB928ED4 X-Received: by 2002:a17:903:25c5:b0:16a:510e:4459 with SMTP id jc5-20020a17090325c500b0016a510e4459mr7308712plb.93.1656011976297; Thu, 23 Jun 2022 12:19:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1656011976; cv=none; d=google.com; s=arc-20160816; b=Akenn2LQmFOoI74axnD/1kjllXjMoD9DOZeyQiZe7zauI2/MRbS2Yue0jV0Rr1jk2S PRdR3smANzf7O/3mbZGZCcC2g9kPoJV4D7tMJfJIqLz+mOZfxwBFjrbMIKUWb5U6UATa DgrSkXfkp+SfQKi5QkjC4/kRtQfn0MNg9U0PvtbjA+aC/TZm5LozDQHZH0e4CNRgRUDv lMUJrmGsPW8g3BlaojrbsJeSlgKrQp3Hqf3QbUu3TE0pGEWl0dK2TsNq8d2H6+1yTyZS Y5YxQ/eZ+6aTUhaqQChjfJ4rBAk7SdiVovOX5QvZMEYikxCMeRea0WP+UsNdkjk0ialr +YUA== 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=OP2q3cqVYcPpONgwT5dusi7B5pxfKIMhdIDBDP88Dgs=; b=NtSsAQQgbLmcy+nnq82DkhyGBGP63JHaGRaFB/PVnxuvhk+orkzjL5VjdpsW0zjzb3 2nYAliONgfMOAaFQS9Tv2OqkCeEGYoVkJw2ZxhOYVnjH4nIOav3r9TY/S4DHm7ipwM3Z dde5QAGHwPD3jylGUBqkwVDL+jq7t6cQjpQVySbx8YFMi0iO/52oSGlZswEbwhPxNDjt SV5Q86p/w1x2tjVxRWQASfyF4GkCPPhMtUV4LKNGXiGTkOs+GT36uW9NiuIncB8Htz9A bS2PZ/rrgYaEXLf0wtd4zfXby7nrqH7vg65x1Y2Ls1+3KH5pVTNp43HK5MxmkjosiXAD RsDw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=OZ9qL1mq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id ng9-20020a17090b1a8900b001c1171b611fsi4144265pjb.22.2022.06.23.12.19.23; Thu, 23 Jun 2022 12:19:36 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-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=@linuxfoundation.org header.s=korg header.b=OZ9qL1mq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236289AbiFWSJy (ORCPT + 99 others); Thu, 23 Jun 2022 14:09:54 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45392 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236586AbiFWSIE (ORCPT ); Thu, 23 Jun 2022 14:08:04 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ABAC89B558; Thu, 23 Jun 2022 10:19:36 -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 93C22B82490; Thu, 23 Jun 2022 17:19:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id CB03CC3411B; Thu, 23 Jun 2022 17:19:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1656004773; bh=KNOSxNzar51jcExsTGYczuNdr2SrdnoUMShxS9ocoTg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=OZ9qL1mquwwvG0ika7WwNDntXaN2hCvyLDRDATEl4RWf6Geo2ZQMAqkjLaLjHp+1r 7oAJmZwfoMZd+0alx2B6ziA5FojUcAXfbFhjb7+eSkWzwTHPRw6LwxFk5lvBly1XPA ePFKFPYDkf4qDmL0PDmSHxRmKtxhtascpaKf08Iw= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, "Jason A. Donenfeld" , Thomas Gleixner , Arnd Bergmann , Borislav Petkov , x86@kernel.org Subject: [PATCH 4.19 145/234] x86/tsc: Use fallback for random_get_entropy() instead of zero Date: Thu, 23 Jun 2022 18:43:32 +0200 Message-Id: <20220623164347.158763634@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220623164343.042598055@linuxfoundation.org> References: <20220623164343.042598055@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=-7.7 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_HI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE 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-kernel@vger.kernel.org From: "Jason A. Donenfeld" commit 3bd4abc07a267e6a8b33d7f8717136e18f921c53 upstream. 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. Signed-off-by: Jason A. Donenfeld Reviewed-by: Thomas Gleixner Cc: Thomas Gleixner Cc: Arnd Bergmann Cc: Borislav Petkov Cc: x86@kernel.org Signed-off-by: Jason A. Donenfeld Signed-off-by: Greg Kroah-Hartman --- arch/x86/include/asm/timex.h | 9 +++++++++ arch/x86/include/asm/tsc.h | 7 +++---- 2 files changed, 12 insertions(+), 4 deletions(-) --- 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 --- a/arch/x86/include/asm/tsc.h +++ b/arch/x86/include/asm/tsc.h @@ -22,13 +22,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);