Hello Ard, On Mon, Oct 28, 2019 at 08:46:28AM +0100, Ard Biesheuvel wrote: > Hello Dominik, > > On Mon, 28 Oct 2019 at 08:30, Dominik Brodowski > <linux@xxxxxxxxxxxxxxxxxxxx> wrote: > > > > Ard, Mario, > > > > in theory, invoking EFI_RNG_PROTOCOL on a Dell Inc. Latitude 7390/09386V, > > BIOS 1.9.2 04/03/2019, should work fine as the system provides EFI v2.60. > > Using my patch from a few weeks ago[1], efi_random_get_seed() is called from > > arch/x86/boot/compressed/eboot.c::efi_main(). In efi_random_get_seed(), the > > calls to > > > > status = efi_call_early(locate_protocol, &rng_proto, NULL, > > (void **)&rng); > > > > and > > > > status = efi_call_early(allocate_pool, EFI_RUNTIME_SERVICES_DATA, > > sizeof(*seed) + EFI_RANDOM_SEED_SIZE, > > (void **)&seed); > > > > succeed. However, > > > > status = rng->get_rng(rng, &rng_algo_raw, EFI_RANDOM_SEED_SIZE, > > seed->bits); > > > > returns EFI_INVALID_PARAMETER, though I can't see why one of these > > parameters is invalid. > > The UEFI spec defines the conditions under which this function may > return EFI_INVALID_PARAMETER as > > """ > RNGValue is null or RNGValueLength is zero. > > """ > > > > When trying to use the default rng algorithm (by > > modifying the test to "(status != EFI_SUCCESS)"), > > > > status = rng->get_rng(rng, NULL, EFI_RANDOM_SEED_SIZE, > > seed->bits); > > > > the call doesn't seem to return. > > > > Any ideas? > > > > Try running this from the UEFI shell: > > http://people.linaro.org/~ard.biesheuvel/RngTest-X64.efi Interestingly, this succeeds -- with the default algorithm, SP800-90-CTR-256 and RAW. So I am more confused than before on why the call to ->get_rng() fails in efi_random_get_seed(). Best, Dominik