From ae1d0746b71a7c427dcf5fb41f5656b50caa75fd Mon Sep 17 00:00:00 2001 From: PMheart <17109513+PMheart@users.noreply.github.com> Date: Mon, 1 Aug 2022 19:14:00 +0200 Subject: [PATCH] ocvalidate: Add checks for `LoadEarly` closes https://github.com/acidanthera/bugtracker/issues/2099 --- Docs/Sample.plist | 2 +- Docs/SampleCustom.plist | 2 +- Utilities/ocvalidate/README.md | 2 ++ Utilities/ocvalidate/ValidateUefi.c | 44 +++++++++++++++++++++++------ 4 files changed, 39 insertions(+), 11 deletions(-) diff --git a/Docs/Sample.plist b/Docs/Sample.plist index 45f3c849..99f12f21 100644 --- a/Docs/Sample.plist +++ b/Docs/Sample.plist @@ -1421,7 +1421,7 @@ Enabled LoadEarly - + Path OpenVariableRuntimeDxe.efi diff --git a/Docs/SampleCustom.plist b/Docs/SampleCustom.plist index 8645ad56..1830c100 100644 --- a/Docs/SampleCustom.plist +++ b/Docs/SampleCustom.plist @@ -1789,7 +1789,7 @@ Enabled LoadEarly - + Path OpenVariableRuntimeDxe.efi diff --git a/Utilities/ocvalidate/README.md b/Utilities/ocvalidate/README.md index f4abdc53..cc3eb4d7 100644 --- a/Utilities/ocvalidate/README.md +++ b/Utilities/ocvalidate/README.md @@ -125,6 +125,8 @@ Utility to validate whether a `config.plist` matches requirements and convention - `OpenUsbKbDxe.efi` and `Ps2KeyboardDxe.efi` should never co-exist. - When HFS+ filesystem driver or `AudioDxe.efi` is in use, `ConnectDrivers` should be enabled altogether. - When `OpenCanopy.efi` is in use, `PickerMode` in `Misc->Boot` should be set to `External`. +- When `OpenVariableRuntimeDxe.efi` is in use, its `LoadEarly` option must be set to `TRUE`. +- When `OpenVariableRuntimeDxe.efi` is NOT in use, `LoadEarly` for any driver must be set to `FALSE`. #### Input - KeySupportMode: Only `Auto`, `V1`, `V2`, or `AMI` are accepted. - When `PointerSupport` is enabled, the value of `PointerSupportMode` should only be `ASUS`. diff --git a/Utilities/ocvalidate/ValidateUefi.c b/Utilities/ocvalidate/ValidateUefi.c index 6aa1c351..7f2ed334 100644 --- a/Utilities/ocvalidate/ValidateUefi.c +++ b/Utilities/ocvalidate/ValidateUefi.c @@ -296,6 +296,7 @@ CheckUefiDrivers ( { UINT32 ErrorCount; UINT32 Index; + UINT32 Index2; OC_UEFI_DRIVER_ENTRY *DriverEntry; CONST CHAR8 *Comment; CONST CHAR8 *Driver; @@ -312,18 +313,20 @@ CheckUefiDrivers ( BOOLEAN IsRequestBootVarRoutingEnabled; BOOLEAN IsKeySupportEnabled; BOOLEAN IsConnectDriversEnabled; + BOOLEAN HasOpenVariableRuntimeDxeEfiDriver; ErrorCount = 0; - HasOpenRuntimeEfiDriver = FALSE; - HasOpenUsbKbDxeEfiDriver = FALSE; - IndexOpenUsbKbDxeEfiDriver = 0; - HasPs2KeyboardDxeEfiDriver = FALSE; - IndexPs2KeyboardDxeEfiDriver = 0; - HasHfsEfiDriver = FALSE; - IndexHfsEfiDriver = 0; - HasAudioDxeEfiDriver = FALSE; - IndexAudioDxeEfiDriver = 0; + HasOpenRuntimeEfiDriver = FALSE; + HasOpenUsbKbDxeEfiDriver = FALSE; + IndexOpenUsbKbDxeEfiDriver = 0; + HasPs2KeyboardDxeEfiDriver = FALSE; + IndexPs2KeyboardDxeEfiDriver = 0; + HasHfsEfiDriver = FALSE; + IndexHfsEfiDriver = 0; + HasAudioDxeEfiDriver = FALSE; + IndexAudioDxeEfiDriver = 0; + HasOpenVariableRuntimeDxeEfiDriver = FALSE; for (Index = 0; Index < Config->Uefi.Drivers.Count; ++Index) { DriverEntry = Config->Uefi.Drivers.Values[Index]; Comment = OC_BLOB_GET (&DriverEntry->Comment); @@ -388,6 +391,29 @@ CheckUefiDrivers ( HasAudioDxeEfiDriver = TRUE; IndexAudioDxeEfiDriver = Index; } + + if (AsciiStrCmp (Driver, "OpenVariableRuntimeDxe.efi") == 0) { + HasOpenVariableRuntimeDxeEfiDriver = TRUE; + + if (!DriverEntry->LoadEarly) { + DEBUG ((DEBUG_WARN, "OpenVariableRuntimeDxe at UEFI->Drivers[%u] must have LoadEarly set to TRUE!\n", Index)); + } + } + } + + // + // LoadEarly should only be TRUE when OpenVariableRuntimeDxe is used. + // + if (!HasOpenVariableRuntimeDxeEfiDriver) { + for (Index2 = 0; Index2 < Config->Uefi.Drivers.Count; ++Index2) { + DriverEntry = Config->Uefi.Drivers.Values[Index2]; + Driver = OC_BLOB_GET (&DriverEntry->Path); + + if (AsciiStrCmp (Driver, "OpenVariableRuntimeDxe.efi") != 0 && DriverEntry->LoadEarly) { + DEBUG ((DEBUG_WARN, "%a at UEFI->Drivers[%u] should have LoadEarly set to FALSE when OpenVariableRuntimeDxe is NOT used!\n", Driver, Index2)); + ++ErrorCount; + } + } } //