Re: efivarfs fails with `No such device` when EFI runtime is missing

From: Ard Biesheuvel
Date: Tue May 11 2021 - 18:07:03 EST


On Tue, 11 May 2021 at 22:58, Paul Menzel <pmenzel@xxxxxxxxxxxxx> wrote:
>
> [Use Ard’s current email, and add other maintainers]
>
> Am 11.05.21 um 22:55 schrieb Paul Menzel:
> > Dear Linux folks,
> >
> >
> > I migrated a 32-bit GNU/Linux installation from BIOS to EFI. Trying to
> > edit the entries in UEFI’s Boot Manager with `efibootmgr`, I got the error:
> >
> > EFI variables are not supported on this system
> >
> > `sudo modprobe efivarfs` fails with
> >
> > No such device
> >
> > After several tries, I found
> >
> > [ 0.000000] efi: No EFI runtime due to 32/64-bit mismatch with
> > kernel
> >
> > logged by Linux, and then I found the Stack Overflow thread *How could
> > 32bit kernel read efivars from 64bit UEFI?* [1].
> >
> > I would have thought, setting EFI variables is just directly writing to
> > some storage. But probably not.
> >
> > Could the error message for the efivarfs load failure be improved, that
> > *device* means the runtime service (if I am not mistaken)?
> >

Not sure what you are asking for here. The efivarfs module fails with
-ENODEV if EFI runtime services are not supported by the kernel (for
whatever reason), and it is actually modprobe in user space that
prints glibc's default error string for ENODEV.

What we could do is print something to the kernel log when this
situation occurs, in addition to the current behavior of modprobe,
which is difficult to change.

Patches welcome.