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;
+ }
+ }
}
//