From 645988d9b339ae7cbb0077b00dca7c5c62f3c3f0 Mon Sep 17 00:00:00 2001 From: Gerd Hoffmann Date: Fri, 8 Nov 2024 10:24:03 +0100 Subject: [PATCH] OvmfPkg: add PcdEntryPointOverrideDefaultValue UefiDriverEntryPointFwCfgOverrideLib will use PcdEntryPointOverrideDefaultValue to decide what to do in case the fw_cfg file specified via PcdEntryPointOverrideFwCfgVarName is not present. Default is "yes". This allows to disable drivers by default and only enable them when requested via fw_cfg. Also log a message with the config option applied and whenever the default value or a fw_cfg option was used. Signed-off-by: Gerd Hoffmann --- .../UefiDriverEntryPointFwCfgOverrideLib.c | 15 ++++++++++++++- .../UefiDriverEntryPointFwCfgOverrideLib.inf | 1 + OvmfPkg/OvmfPkg.dec | 4 ++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/OvmfPkg/Library/UefiDriverEntryPointFwCfgOverrideLib/UefiDriverEntryPointFwCfgOverrideLib.c b/OvmfPkg/Library/UefiDriverEntryPointFwCfgOverrideLib/UefiDriverEntryPointFwCfgOverrideLib.c index debbacb42f..6de3746a20 100644 --- a/OvmfPkg/Library/UefiDriverEntryPointFwCfgOverrideLib/UefiDriverEntryPointFwCfgOverrideLib.c +++ b/OvmfPkg/Library/UefiDriverEntryPointFwCfgOverrideLib/UefiDriverEntryPointFwCfgOverrideLib.c @@ -120,7 +120,20 @@ _ModuleEntryPoint ( FixedPcdGetPtr (PcdEntryPointOverrideFwCfgVarName), &Enabled ); - if (!RETURN_ERROR (RetStatus) && !Enabled) { + + if (RETURN_ERROR (RetStatus)) { + Enabled = AsciiStrCmp (FixedPcdGetPtr (PcdEntryPointOverrideDefaultValue), "yes") == 0; + } + + DEBUG (( + DEBUG_INFO, + "EntryPointFwCfgOverride: %a = %a (%a)\n", + FixedPcdGetPtr (PcdEntryPointOverrideFwCfgVarName), + Enabled ? "enabled" : "disabled", + RETURN_ERROR (RetStatus) ? "default" : "fw_cfg" + )); + + if (!Enabled) { // // The QEMU fw_cfg variable tells us not to load this image. So abort. // diff --git a/OvmfPkg/Library/UefiDriverEntryPointFwCfgOverrideLib/UefiDriverEntryPointFwCfgOverrideLib.inf b/OvmfPkg/Library/UefiDriverEntryPointFwCfgOverrideLib/UefiDriverEntryPointFwCfgOverrideLib.inf index 263e00ceef..19985b8c29 100644 --- a/OvmfPkg/Library/UefiDriverEntryPointFwCfgOverrideLib/UefiDriverEntryPointFwCfgOverrideLib.inf +++ b/OvmfPkg/Library/UefiDriverEntryPointFwCfgOverrideLib/UefiDriverEntryPointFwCfgOverrideLib.inf @@ -37,6 +37,7 @@ [FixedPcd] gUefiOvmfPkgTokenSpaceGuid.PcdEntryPointOverrideFwCfgVarName + gUefiOvmfPkgTokenSpaceGuid.PcdEntryPointOverrideDefaultValue # # For UEFI drivers, these architectural protocols defined in PI 1.0 spec need diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index c1c8198061..7e13d313e6 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -346,6 +346,10 @@ # check to decide whether to abort dispatch of the driver it is linked into. gUefiOvmfPkgTokenSpaceGuid.PcdEntryPointOverrideFwCfgVarName|""|VOID*|0x68 + ## The default value UefiDriverEntryPointFwCfgOverrideLib will use in case + # the QEMU fw_cfg variable is not present + gUefiOvmfPkgTokenSpaceGuid.PcdEntryPointOverrideDefaultValue|"yes"|VOID*|0x76 + ## Restrict boot to EFI applications in firmware volumes. gUefiOvmfPkgTokenSpaceGuid.PcdBootRestrictToFirmware|FALSE|BOOLEAN|0x6c