Received: by 2002:a6b:fb09:0:0:0:0:0 with SMTP id h9csp2932501iog; Mon, 20 Jun 2022 07:45:54 -0700 (PDT) X-Google-Smtp-Source: AGRyM1tBdvoGl0lVZv1XQxpDdyyASDQyirIk6PUQbR+QwFWeQoOzMA5WbN7mBcoxZWCvOIUvIubT X-Received: by 2002:a05:6a00:2187:b0:50c:ef4d:ef3b with SMTP id h7-20020a056a00218700b0050cef4def3bmr24733388pfi.83.1655736354497; Mon, 20 Jun 2022 07:45:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1655736354; cv=none; d=google.com; s=arc-20160816; b=x+77EUQ7d+GnlqsdIAdueVraJHLvqeVk3jr+c6v/ypf1wBoX0MDnH5vip/xQ+JTOPR cKP6fuGVxZWHUGf/g0zss3sDgcxdi3mDXnTaqXcf3K5/QK5k+zGhzrvYPnb5Ic2Qx1Ce KKZl1CVQqu5o242MFSMnb+nd1KUZnntFyOXrJYyiXiBt0J5LAKN5TD9gLeBpBZ0Jr46P 4/xEhZpteCTsf3cyBsVeDIpSYKeSC0DMYxmBXDdBGLRk2WqVC3VLZGlDD52xtsfDaNuY EHh2dy/jtXueJe4qFqAs/69dYY2yMUTuC8ddZdC/va1iBODy0O7BNPE3m4xPfWw4NfAJ VKBg== 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=xgp7mjXzo6Dmqeg9BR6aFJBE5sl7f4eQ5L3dLW6PFYFasPL7R8hSrK6sjv1Cp2fy5m v9OQT/G4CkRjDJ8WZiYwN36kie1MuKkeRdTtTzfK3UoU6aOI2hvuAYEn8bD9a4U3v1zZ R5foBKlf7Ij5LK0MYeNxwYqlCMlZif8hURh3sbCdVsBBs8pfW3enj7WUvYVFI5cRkA6z /6DbO+wVIB0Vmp5/QZUhENQkqMiX+tIp53dGB2PqkmAbd1UEsIizWfkoWAQx9U4kZhjQ w0yktVIXAE2YUAzjdx75GSHZo9fhTCSi6VyfOiULYbkMIRm/FWCVAfOTd9fQrkgwMlfU ySJg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=Z8BnWWAC; 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 i15-20020a639d0f000000b00408a99544b0si18051495pgd.525.2022.06.20.07.45.42; Mon, 20 Jun 2022 07:45:54 -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=Z8BnWWAC; 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 S243375AbiFTNum (ORCPT + 99 others); Mon, 20 Jun 2022 09:50:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33472 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1349039AbiFTNsH (ORCPT ); Mon, 20 Jun 2022 09:48:07 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [139.178.84.217]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 518EB2EA09; Mon, 20 Jun 2022 06:17:45 -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 dfw.source.kernel.org (Postfix) with ESMTPS id 1861860ED5; Mon, 20 Jun 2022 13:17:45 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 0C11FC3411B; Mon, 20 Jun 2022 13:17:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1655731064; bh=KNOSxNzar51jcExsTGYczuNdr2SrdnoUMShxS9ocoTg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Z8BnWWACsHAZAoMCK1zKRWT9tLZVaznRoRnZ7i95KXKACu982DzKokWvmWexs6NZo A2S//KfB88m8gcPtY9ORhr/zq5K3U0wy5vBLt45AV5d2FjnpcWyzRTQbswlccsWyIt ymX5APvQtxStPVtCHv9P5Hiz2V86f0h95NGA5Y8E= 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 5.4 141/240] x86/tsc: Use fallback for random_get_entropy() instead of zero Date: Mon, 20 Jun 2022 14:50:42 +0200 Message-Id: <20220620124743.094744681@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220620124737.799371052@linuxfoundation.org> References: <20220620124737.799371052@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);