Message ID | 20221109172750.2823891-1-ardb@kernel.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | efi: Override runtime supported mask from a EFI variable if present | expand |
Hi, On Wed, Nov 09, 2022 at 06:27:50PM +0100, Ard Biesheuvel wrote: > For debugging purposes, allow the runtime override mask to be set from a > EFI variable if one exists. For instance, the RT supported mask can be > set to 0xfffd to disable the SetTime() runtime service, and enable all > others: > > echo -ne "\x7\0\0\0\xfd\xff" \ > > /sys/firmware/efi/efivars/LinuxRtMaskOverride-eb66918a-7eef-402a-842e-931d21c38ae9 I'm really sorry, I applied this patch, but I couldn't find the file (LinuxRtMaskOverride*) under efivars, and couldn't find another way of setting the variable. Thanks, Alex > > Signed-off-by: Ard Biesheuvel <ardb@kernel.org> > --- > drivers/firmware/efi/efi.c | 12 +++++++++++- > 1 file changed, 11 insertions(+), 1 deletion(-) > > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > index a46df5d1d0942751..faed1ef78c044924 100644 > --- a/drivers/firmware/efi/efi.c > +++ b/drivers/firmware/efi/efi.c > @@ -367,7 +367,17 @@ static int __init efisubsys_init(void) > } > } > > - if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) > + if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE)) { > + unsigned long size = sizeof(efi.runtime_supported_mask); > + > + if (efi.get_variable(L"LinuxRtMaskOverride", > + &EFI_RT_PROPERTIES_TABLE_GUID, NULL, &size, > + &efi.runtime_supported_mask) == EFI_SUCCESS) > + pr_info("Overriding runtime_supported_mask to 0x%x\n", > + efi.runtime_supported_mask); > + } > + > + if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_TIME)) > platform_device_register_simple("rtc-efi", 0, NULL, 0); > > /* We register the efi directory at /sys/firmware/efi */ > -- > 2.35.1 >
On Thu, 10 Nov 2022 at 15:37, Alexandru Elisei <alexandru.elisei@arm.com> wrote: > > Hi, > > On Wed, Nov 09, 2022 at 06:27:50PM +0100, Ard Biesheuvel wrote: > > For debugging purposes, allow the runtime override mask to be set from a > > EFI variable if one exists. For instance, the RT supported mask can be > > set to 0xfffd to disable the SetTime() runtime service, and enable all > > others: > > > > echo -ne "\x7\0\0\0\xfd\xff" \ > > > /sys/firmware/efi/efivars/LinuxRtMaskOverride-eb66918a-7eef-402a-842e-931d21c38ae9 > > I'm really sorry, I applied this patch, but I couldn't find the file > (LinuxRtMaskOverride*) under efivars, and couldn't find another way of > setting the variable. > The variable will be created by writing to the file. But no worries, I think we have enough context now. I've queued up the patch that checks the SMBIOS record for Altra machines. > > > > Signed-off-by: Ard Biesheuvel <ardb@kernel.org> > > --- > > drivers/firmware/efi/efi.c | 12 +++++++++++- > > 1 file changed, 11 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c > > index a46df5d1d0942751..faed1ef78c044924 100644 > > --- a/drivers/firmware/efi/efi.c > > +++ b/drivers/firmware/efi/efi.c > > @@ -367,7 +367,17 @@ static int __init efisubsys_init(void) > > } > > } > > > > - if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) > > + if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE)) { > > + unsigned long size = sizeof(efi.runtime_supported_mask); > > + > > + if (efi.get_variable(L"LinuxRtMaskOverride", > > + &EFI_RT_PROPERTIES_TABLE_GUID, NULL, &size, > > + &efi.runtime_supported_mask) == EFI_SUCCESS) > > + pr_info("Overriding runtime_supported_mask to 0x%x\n", > > + efi.runtime_supported_mask); > > + } > > + > > + if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_TIME)) > > platform_device_register_simple("rtc-efi", 0, NULL, 0); > > > > /* We register the efi directory at /sys/firmware/efi */ > > -- > > 2.35.1 > >
diff --git a/drivers/firmware/efi/efi.c b/drivers/firmware/efi/efi.c index a46df5d1d0942751..faed1ef78c044924 100644 --- a/drivers/firmware/efi/efi.c +++ b/drivers/firmware/efi/efi.c @@ -367,7 +367,17 @@ static int __init efisubsys_init(void) } } - if (efi_rt_services_supported(EFI_RT_SUPPORTED_TIME_SERVICES)) + if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_VARIABLE)) { + unsigned long size = sizeof(efi.runtime_supported_mask); + + if (efi.get_variable(L"LinuxRtMaskOverride", + &EFI_RT_PROPERTIES_TABLE_GUID, NULL, &size, + &efi.runtime_supported_mask) == EFI_SUCCESS) + pr_info("Overriding runtime_supported_mask to 0x%x\n", + efi.runtime_supported_mask); + } + + if (efi_rt_services_supported(EFI_RT_SUPPORTED_GET_TIME)) platform_device_register_simple("rtc-efi", 0, NULL, 0); /* We register the efi directory at /sys/firmware/efi */