linux-crypto.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stafford Horne <shorne@gmail.com>
To: "Jason A. Donenfeld" <Jason@zx2c4.com>
Cc: linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org
Subject: Re: [PATCH v7 11/17] openrisc: account for 0 starting value in random_get_entropy()
Date: Sun, 1 May 2022 07:11:37 +0900	[thread overview]
Message-ID: <Ym20Ga3VsJRzXppd@antec> (raw)
In-Reply-To: <YmyRATzJBQX+wnIP@zx2c4.com>

On Sat, Apr 30, 2022 at 03:29:37AM +0200, Jason A. Donenfeld wrote:
> Hi Stafford,
> 
> On Sat, Apr 30, 2022 at 10:19:03AM +0900, Stafford Horne wrote:
> > Hi Jason,
> > 
> > On Fri, Apr 29, 2022 at 02:16:48AM +0200, Jason A. Donenfeld wrote:
> > > As a sanity check, this series makes sure that during early boot, the
> > > cycle counter isn't returning all zeros. However, OpenRISC's TTCR timer
> > > can be rather slow and starts out as zero during stages of early boot.
> > > We know it works, however. So just always add 1 to random_get_entropy()
> > > so that it doesn't trigger these checks.
> > 
> > Just one nit, you might want to qualify that this is related to simulators/qemu:
> >  * "However, in simulators OpenRISC's TTCR timer can be rather slow..."
> 
> Nice catch, will do.

I was thinking about this, the reason the tick timer is returing 0 is because
the timer is not started.  It's getting initialized right after the random
number generator.

A patch like this helps to startup the timer during intial startup, but I am not
sure its the best thing:

diff --git a/arch/openrisc/kernel/head.S b/arch/openrisc/kernel/head.S
index 15f1b38dfe03..a9b3b5614e13 100644
--- a/arch/openrisc/kernel/head.S
+++ b/arch/openrisc/kernel/head.S
@@ -521,6 +521,9 @@ _start:
        l.ori   r3,r0,0x1
        l.mtspr r0,r3,SPR_SR
 
+       l.movhi r3,hi(SPR_TTMR_CR)
+       l.mtspr r0,r3,SPR_TTMR
+
        CLEAR_GPR(r1)
        CLEAR_GPR(r2)
        CLEAR_GPR(r3)

I was testing this by removing the get_cycles() + 1 patch and I get the
following warning. Starting the tick timer early on in kernel boot helps fix
this issue as well.

But I wonder:
 - Why don't any other architectures have similar issues.
 - Is there any more correct place to do an early timer kick off.

    exec: /home/shorne/work/openrisc/qemu/build/or1k-softmmu/qemu-system-or1k -cpu or1200 -M or1k-sim -kernel /home/shorne/work/linux/vmlinux -initrd /home/shorne/work/linux/initramfs.cpio.gz -serial mon:stdi
    o -nographic -gdb tcp::10001 -m 64

    [    0.000000] OpenRISC Linux -- http://openrisc.io
    [    0.000000] percpu: Embedded 5 pages/cpu s11584 r8192 d21184 u40960
    [    0.000000] Built 1 zonelists, mobility grouping on.  Total pages: 8160
    [    0.000000] Kernel command line:
    [    0.000000] Dentry cache hash table entries: 8192 (order: 2, 32768 bytes, linear)
    [    0.000000] Inode-cache hash table entries: 4096 (order: 1, 16384 bytes, linear)
    [    0.000000] Sorting __ex_table...
    [    0.000000] mem auto-init: stack:all(zero), heap alloc:off, heap free:off
    [    0.000000] mem_init_done ...........................................
    [    0.000000] Memory: 57424K/65536K available (4595K kernel code, 157K rwdata, 976K rodata, 195K init, 89K bss, 8112K reserved, 0K cma-reserved)
    [    0.000000] rcu: Hierarchical RCU implementation.
    [    0.000000] rcu:     RCU restricting CPUs from NR_CPUS=2 to nr_cpu_ids=1.
    [    0.000000] rcu: RCU calculated value of scheduler-enlistment delay is 10 jiffies.
    [    0.000000] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=1
    [    0.000000] NR_IRQS: 32, nr_irqs: 32, preallocated irqs: 0

(Warning for get_cycles returning 0)

    [    0.000000] ------------[ cut here ]------------
    [    0.000000] WARNING: CPU: 0 PID: 0 at drivers/char/random.c:1016 rand_initialize+0x15c/0x18c
    [    0.000000] Missing cycle counter and fallback timer; RNG entropy collection will consequently suffer.
    [    0.000000] Modules linked in:
    [    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.18.0-rc4-17398-gc576c8ccdc30-dirty #724
    [    0.000000] Call trace:
    [    0.000000] [<(ptrval)>] dump_stack_lvl+0x78/0xa0
    [    0.000000] [<(ptrval)>] dump_stack+0x1c/0x2c
    [    0.000000] [<(ptrval)>] __warn+0x100/0x13c
    [    0.000000] [<(ptrval)>] ? rand_initialize+0x15c/0x18c
    [    0.000000] [<(ptrval)>] warn_slowpath_fmt+0x84/0x9c
    [    0.000000] [<(ptrval)>] rand_initialize+0x15c/0x18c
    [    0.000000] [<(ptrval)>] ? start_kernel+0x5dc/0x7c4
    [    0.000000] [<(ptrval)>] ? start_kernel+0x0/0x7c4
    [    0.000000] ---[ end trace 0000000000000000 ]---

(Start of OpenRISC tick timer)

    [    0.000000] clocksource: openrisc_timer: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 95563022313 ns
    [    0.000000] 40.00 BogoMIPS (lpj=200000)
    [    0.000000] pid_max: default: 32768 minimum: 301
    [    0.000000] random: get_random_bytes called from net_ns_init+0x94/0x3f8 with crng_init=0
    [    0.000000] Mount-cache hash table entries: 2048 (order: 0, 8192 bytes, linear)
    [    0.000000] Mountpoint-cache hash table entries: 2048 (order: 0, 8192 bytes, linear)
    [    0.010000] rcu: Hierarchical SRCU implementation.



  reply	other threads:[~2022-04-30 22:11 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-04-23 21:26 [PATCH v6 00/17] archs/random: fallback to best raw ktime when no cycle counter Jason A. Donenfeld
2022-04-23 21:26 ` [PATCH v6 01/17] ia64: define get_cycles macro for arch-override Jason A. Donenfeld
2022-04-23 21:26 ` [PATCH v6 02/17] s390: " Jason A. Donenfeld
2022-04-25  9:43   ` Heiko Carstens
2022-04-25  9:48     ` Jason A. Donenfeld
2022-04-25 10:21       ` Heiko Carstens
2022-04-23 21:26 ` [PATCH v6 03/17] parisc: " Jason A. Donenfeld
2022-04-24 18:35   ` Helge Deller
2022-04-23 21:26 ` [PATCH v6 04/17] alpha: " Jason A. Donenfeld
2022-04-26 20:31   ` Matt Turner
2022-04-23 21:26 ` [PATCH v6 05/17] powerpc: " Jason A. Donenfeld
2022-04-28  5:19   ` Michael Ellerman
2022-04-23 21:26 ` [PATCH v6 06/17] timekeeping: add raw clock fallback for random_get_entropy() Jason A. Donenfeld
2022-04-25 12:37   ` Thomas Gleixner
2022-04-25 13:22     ` Jason A. Donenfeld
2022-05-02  9:37       ` Thomas Gleixner
2022-05-05  0:19         ` [PATCH v7] timekeeping: Add " Jason A. Donenfeld
2022-05-05  0:29           ` Jason A. Donenfeld
2022-05-06  3:20           ` [timekeeping] 3aeaac747d: PANIC:early_exception kernel test robot
2022-05-06  7:59             ` Thomas Gleixner
2022-05-06 10:12               ` Jason A. Donenfeld
2022-05-06 16:01                 ` Thomas Gleixner
2022-05-06 10:21         ` [PATCH v8] timekeeping: Add raw clock fallback for random_get_entropy() Jason A. Donenfeld
2022-04-23 21:26 ` [PATCH v6 07/17] m68k: use fallback for random_get_entropy() instead of zero Jason A. Donenfeld
2022-04-23 21:26 ` [PATCH v6 08/17] riscv: " Jason A. Donenfeld
2022-04-25 14:55   ` Palmer Dabbelt
2022-04-25 15:02     ` Jason A. Donenfeld
2022-04-25 15:20       ` Palmer Dabbelt
2022-04-23 21:26 ` [PATCH v6 09/17] mips: use fallback for random_get_entropy() instead of just c0 random Jason A. Donenfeld
2022-04-26 20:28   ` Maciej W. Rozycki
2022-04-27  1:29     ` Jason A. Donenfeld
2022-06-24 13:04       ` Jason A. Donenfeld
2022-06-24 13:25         ` Maciej W. Rozycki
2022-09-25 10:00           ` Jason A. Donenfeld
2022-09-25 14:17             ` Maciej W. Rozycki
2022-04-23 21:26 ` [PATCH v6 10/17] arm: use fallback for random_get_entropy() instead of zero Jason A. Donenfeld
2022-04-25 14:30   ` Russell King (Oracle)
2022-04-23 21:26 ` [PATCH v6 11/17] openrisc: " Jason A. Donenfeld
2022-04-27 21:42   ` Stafford Horne
2022-04-27 23:26     ` Jason A. Donenfeld
2022-04-29  0:16   ` [PATCH v7 11/17] openrisc: account for 0 starting value in random_get_entropy() Jason A. Donenfeld
2022-04-30  1:19     ` Stafford Horne
2022-04-30  1:29       ` Jason A. Donenfeld
2022-04-30 22:11         ` Stafford Horne [this message]
2022-04-30 22:34           ` Jason A. Donenfeld
2022-04-30 22:44             ` Stafford Horne
2022-04-23 21:26 ` [PATCH v6 12/17] nios2: use fallback for random_get_entropy() instead of zero Jason A. Donenfeld
2022-05-23 13:56   ` Dinh Nguyen
2022-04-23 21:26 ` [PATCH v6 13/17] x86: " Jason A. Donenfeld
2022-04-25 12:35   ` Thomas Gleixner
2022-04-25 13:41     ` Jason A. Donenfeld
2022-04-25 13:51       ` Jason A. Donenfeld
2022-04-25 17:03       ` Thomas Gleixner
2022-04-25 17:24         ` Jason A. Donenfeld
2022-04-26  8:33           ` [PATCH v7 13/17] x86/asm: " Jason A. Donenfeld
2022-05-02  9:40             ` Thomas Gleixner
2022-04-23 21:26 ` [PATCH v6 14/17] um: " Jason A. Donenfeld
2022-04-23 21:26 ` [PATCH v6 15/17] sparc: " Jason A. Donenfeld
2022-04-23 21:26 ` [PATCH v6 16/17] xtensa: " Jason A. Donenfeld
2022-04-23 21:26 ` [PATCH v6 17/17] random: insist on random_get_entropy() existing in order to simplify Jason A. Donenfeld

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=Ym20Ga3VsJRzXppd@antec \
    --to=shorne@gmail.com \
    --cc=Jason@zx2c4.com \
    --cc=linux-crypto@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).