• Christopher Obbard's avatar
    um: random: Register random as hwrng-core device · 72d3e093
    Christopher Obbard authored
    The UML random driver creates a dummy device under the guest,
    /dev/hw_random. When this file is read from the guest, the driver
    reads from the host machine's /dev/random, in-turn reading from
    the host kernel's entropy pool. This entropy pool could have been
    filled by a hardware random number generator or just the host
    kernel's internal software entropy generator.
    
    Currently the driver does not fill the guests kernel entropy pool,
    this requires a userspace tool running inside the guest (like
    rng-tools) to read from the dummy device provided by this driver,
    which then would fill the guest's internal entropy pool.
    
    This all seems quite pointless when we are already reading from an
    entropy pool, so this patch aims to register the device as a hwrng
    device using the hwrng-core framework. This not only improves and
    cleans up the driver, but also fills the guest's entropy pool
    without having to resort to using extra userspace tools in the guest.
    
    This is typically a nuisance when booting a guest: the random pool
    takes a long time (~200s) to build up enough entropy since the dummy
    hwrng is not used to fill the guest's pool.
    
    This port was originally attempted by Alexander Neville "dark" (in CC,
    discussion in Link), but the conversation there stalled since the
    handling of -EAGAIN errors were no removed and longer handled by the
    driver. This patch attempts to use the existing method of error
    handling but utilises the new hwrng core.
    
    The issue can be noticed when booting a UML guest:
    
        [    2.560000] random: fast init done
        [  214.000000] random: crng init done
    
    With the patch applied, filling the pool becomes a lot quicker:
    
        [    2.560000] random: fast init done
        [   12.000000] random: crng init done
    
    Cc: Alexander Neville <dark@volatile.bz>
    Link: https://lore.kernel.org/lkml/20190828204609.02a7ff70@TheDarkness/
    Link: https://lore.kernel.org/lkml/20190829135001.6a5ff940@TheDarkness.local/
    Cc: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
    Signed-off-by: default avatarChristopher Obbard <chris.obbard@collabora.com>
    Acked-by: default avatarAnton Ivanov <anton.ivanov@cambridgegreys.com>
    Signed-off-by: default avatarRichard Weinberger <richard@nod.at>
    72d3e093
Kconfig 16.4 KB