X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=IntelFrameworkModulePkg%2FUniversal%2FVariablePei%2FVariable.c;fp=IntelFrameworkModulePkg%2FUniversal%2FVariablePei%2FVariable.c;h=2cda7ff3add962561b39d6417410e84499d24207;hp=33363e67eaed69ae7deb920b7b8e741e1d7fac9c;hb=f2fa830ef0c29e8d35dcb8e6025a0b736e5cdad0;hpb=0d401d4d9cc1a5893a87bb28ef7b0265e6b91008 diff --git a/IntelFrameworkModulePkg/Universal/VariablePei/Variable.c b/IntelFrameworkModulePkg/Universal/VariablePei/Variable.c index 33363e67ea..2cda7ff3ad 100644 --- a/IntelFrameworkModulePkg/Universal/VariablePei/Variable.c +++ b/IntelFrameworkModulePkg/Universal/VariablePei/Variable.c @@ -47,11 +47,12 @@ EFI_GUID mEfiVariableIndexTableGuid = EFI_VARIABLE_INDEX_TABLE_GUID; /** Provide the functionality of the variable services. - @param FileHandle Handle of the file being invoked. - @param PeiServices Describes the list of possible PEI Services. + @param FileHandle Handle of the file being invoked. + @param PeiServices Describes the list of possible PEI Services. - @return Status - EFI_SUCCESS if the interface could be successfully - installed + @return EFI_SUCCESS If the interface could be successfully installed. + @return EFI_UNSUPPORTED If current boot path is in recovery mode, then does not + install this interface. **/ EFI_STATUS @@ -61,9 +62,21 @@ PeimInitializeVariableServices ( IN CONST EFI_PEI_SERVICES **PeiServices ) { + EFI_BOOT_MODE BootMode; + EFI_STATUS Status; + // - // Publish the variable capability to other modules - // + // Check if this is recovery boot path. If no, publish the variable access capability + // to other modules. If yes, the content of variable area is not reliable. Therefore, + // in this case we should not provide variable service to other pei modules. + // + Status = (*PeiServices)->GetBootMode (PeiServices, &BootMode); + ASSERT_EFI_ERROR (Status); + + if (BootMode == BOOT_IN_RECOVERY_MODE) { + return EFI_UNSUPPORTED; + } + return (**PeiServices).InstallPpi (PeiServices, &mPpiListVariable[0]); }