Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp2387782ioo; Sat, 28 May 2022 12:04:32 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz2pbDe21S4tKxmKjnoD9911iha0RrCPqjPghPskxEazFZlbCS/TfX5U2r/Tnxmn8NZT9K2 X-Received: by 2002:a17:902:ce87:b0:163:6c9:b070 with SMTP id f7-20020a170902ce8700b0016306c9b070mr22067527plg.51.1653764672184; Sat, 28 May 2022 12:04:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653764672; cv=none; d=google.com; s=arc-20160816; b=GdPg1pt7Zyq0qsrrlZQUeUpYacaqBgnHf8IfLszCyrJZ76mEJd/7tQgFHaZom/5cbI 41onlaLZ5yb5iQjnXfmkNWo+1lnNW8dGr3C/adoZK1REqt9JloNC1sRoxe6H1FTJc+nw s1hPjKd2yM6YlRzgOkYwfH/ab+pzFLSvARW1t3a99p7NnUaWyIac9pSYG7LMPkMV0C27 OVTGXmHS7rAO2Moix8N9jtn1Ajxlkr9VWqwxEkH+t6KZULtWAG6t+nAEpKWqv7ogjThQ hGLeYOeOZ9Lrq+ATt8ZtbJprYQuJCTQVjdgUYIFEFBNFxOGE+foj8I+Iqo6qLotBMYdg B3Yg== 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=SaTNIDq58+G0iEH6ElCKR7+HV1so3NONarc4HISStRs=; b=WOXm0SYFTXiyb7I4gCprqQbqkejUFPjju2U//WDcf6NlQ46toPkjr30ZhEAInMQTpU MO+UD0pFCybhpFeDdsuXOZyQc2FqTnTr+re6I6aHCb+hXRatkr0V6dWiiIc8bHqXitWc i9kk23wbH8mYFMzM/g4zk0oC2G/koKvfOg8bMVzo1djrk2L7NruCaLCX8n3Q4yYCxBYp erCjPKODmurH9dxbm7ZlKZ9DuqdHEd+aRKPnNJD09ng+m/WEgWO8GnR3y8ed8go/GTJx yFgKlvBlum+Mirp5cBy0xaaGDHXK4ELlNNKJ0tidSsZzKLsYIOKJnak7a+kv73fHag12 ChPQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=TCY7thyc; 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 pj5-20020a17090b4f4500b001e0897e99f7si7989281pjb.97.2022.05.28.12.04.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 28 May 2022 12:04:32 -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=TCY7thyc; 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 D4E773E0C4; Sat, 28 May 2022 11:45:36 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235981AbiE0Ixi (ORCPT + 99 others); Fri, 27 May 2022 04:53:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33298 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1350115AbiE0Iwu (ORCPT ); Fri, 27 May 2022 04:52:50 -0400 Received: from ams.source.kernel.org (ams.source.kernel.org [145.40.68.75]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6E7C259086; Fri, 27 May 2022 01:52:24 -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 9817AB823DF; Fri, 27 May 2022 08:52:22 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id AD51FC385A9; Fri, 27 May 2022 08:52:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1653641541; bh=Ca/av4HY0exhaMWqnerAnWuF1QOI4lsHmT1pw78Fx1E=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=TCY7thycdEjoGugdWjM0W1l56Gtbk/WBMP7eN5TLsnS8iMWLKqX0OHe707JPhdekl KJr19GxPAOQbUIvJaJhsBHsn8hXitGjcnzqFWTKxLDuzCSmqO3uo5RXG58ip7p9UAc Ntu57crs07oa5dEruGHZqcp5OvLIESSRXFgki1Po= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Thomas Gleixner , "Jason A. Donenfeld" , Arnd Bergmann , Theodore Tso Subject: [PATCH 5.18 10/47] timekeeping: Add raw clock fallback for random_get_entropy() Date: Fri, 27 May 2022 10:49:50 +0200 Message-Id: <20220527084802.751711626@linuxfoundation.org> X-Mailer: git-send-email 2.36.1 In-Reply-To: <20220527084801.223648383@linuxfoundation.org> References: <20220527084801.223648383@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 1366992e16bddd5e2d9a561687f367f9f802e2e4 upstream. The addition of random_get_entropy_fallback() provides access to whichever time source has the highest frequency, which is useful for gathering entropy on platforms without available cycle counters. It's not necessarily as good as being able to quickly access a cycle counter that the CPU has, but it's still something, even when it falls back to being jiffies-based. In the event that a given arch does not define get_cycles(), falling back to the get_cycles() default implementation that returns 0 is really not the best we can do. Instead, at least calling random_get_entropy_fallback() would be preferable, because that always needs to return _something_, even falling back to jiffies eventually. It's not as though random_get_entropy_fallback() is super high precision or guaranteed to be entropic, but basically anything that's not zero all the time is better than returning zero all the time. Finally, since random_get_entropy_fallback() is used during extremely early boot when randomizing freelists in mm_init(), it can be called before timekeeping has been initialized. In that case there really is nothing we can do; jiffies hasn't even started ticking yet. So just give up and return 0. Suggested-by: Thomas Gleixner Signed-off-by: Jason A. Donenfeld Reviewed-by: Thomas Gleixner Cc: Arnd Bergmann Cc: Theodore Ts'o Signed-off-by: Jason A. Donenfeld Signed-off-by: Greg Kroah-Hartman --- include/linux/timex.h | 8 ++++++++ kernel/time/timekeeping.c | 15 +++++++++++++++ 2 files changed, 23 insertions(+) --- a/include/linux/timex.h +++ b/include/linux/timex.h @@ -62,6 +62,8 @@ #include #include +unsigned long random_get_entropy_fallback(void); + #include #ifndef random_get_entropy @@ -74,8 +76,14 @@ * * By default we use get_cycles() for this purpose, but individual * architectures may override this in their asm/timex.h header file. + * If a given arch does not have get_cycles(), then we fallback to + * using random_get_entropy_fallback(). */ +#ifdef get_cycles #define random_get_entropy() ((unsigned long)get_cycles()) +#else +#define random_get_entropy() random_get_entropy_fallback() +#endif #endif /* --- a/kernel/time/timekeeping.c +++ b/kernel/time/timekeeping.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #include #include @@ -2380,6 +2381,20 @@ static int timekeeping_validate_timex(co return 0; } +/** + * random_get_entropy_fallback - Returns the raw clock source value, + * used by random.c for platforms with no valid random_get_entropy(). + */ +unsigned long random_get_entropy_fallback(void) +{ + struct tk_read_base *tkr = &tk_core.timekeeper.tkr_mono; + struct clocksource *clock = READ_ONCE(tkr->clock); + + if (unlikely(timekeeping_suspended || !clock)) + return 0; + return clock->read(clock); +} +EXPORT_SYMBOL_GPL(random_get_entropy_fallback); /** * do_adjtimex() - Accessor function to NTP __do_adjtimex function