summaryrefslogtreecommitdiff
path: root/MdeModulePkg/Library/DxeCapsuleLibFmp
diff options
context:
space:
mode:
authorKinney, Michael D <michael.d.kinney@intel.com>2018-02-06 17:43:32 -0800
committerMichael D Kinney <michael.d.kinney@intel.com>2018-02-11 16:35:15 -0800
commit7f0301e39a11852c8c26b6a700f0a3a0c381e95c (patch)
tree787d5d67c846298446d6d8c586c2e19653ad1738 /MdeModulePkg/Library/DxeCapsuleLibFmp
parent48ed4769fcfb524315d60ff745973ea3c8525ff5 (diff)
downloadedk2-7f0301e39a11852c8c26b6a700f0a3a0c381e95c.zip
edk2-7f0301e39a11852c8c26b6a700f0a3a0c381e95c.tar.gz
edk2-7f0301e39a11852c8c26b6a700f0a3a0c381e95c.tar.bz2
MdeModulePkg/DxeCapsuleLibFmp: Verify nested capsule with FMP
https://bugzilla.tianocore.org/show_bug.cgi?id=873 Update IsNestedFmpCapsule() to verify the CapsuleGuid in the CapsuleHeader against the installed Firmware Management Protocol instances. The current logic that uses the ESRT Table does not work because capsules are processed before the ESRT Table is published at the Ready To Boot event. Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Star Zeng <star.zeng@intel.com> Cc: Eric Dong <eric.dong@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Reviewed-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Bret Barkelew <Bret.Barkelew@microsoft.com>
Diffstat (limited to 'MdeModulePkg/Library/DxeCapsuleLibFmp')
-rw-r--r--MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c25
-rw-r--r--MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf1
2 files changed, 14 insertions, 12 deletions
diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
index 56c8e98..15dbc00 100644
--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c
@@ -1190,7 +1190,6 @@ IsNestedFmpCapsule (
)
{
EFI_STATUS Status;
- EFI_SYSTEM_RESOURCE_TABLE *Esrt;
EFI_SYSTEM_RESOURCE_ENTRY *EsrtEntry;
UINTN Index;
BOOLEAN EsrtGuidFound;
@@ -1198,6 +1197,8 @@ IsNestedFmpCapsule (
UINTN NestedCapsuleSize;
ESRT_MANAGEMENT_PROTOCOL *EsrtProtocol;
EFI_SYSTEM_RESOURCE_ENTRY Entry;
+ EFI_HANDLE *HandleBuffer;
+ UINTN NumberOfHandles;
EsrtGuidFound = FALSE;
if (mIsVirtualAddrConverted) {
@@ -1223,19 +1224,21 @@ IsNestedFmpCapsule (
}
//
- // Check ESRT configuration table
+ // Check Firmware Management Protocols
//
if (!EsrtGuidFound) {
- Status = EfiGetSystemConfigurationTable(&gEfiSystemResourceTableGuid, (VOID **)&Esrt);
+ HandleBuffer = NULL;
+ Status = GetFmpHandleBufferByType (
+ &CapsuleHeader->CapsuleGuid,
+ 0,
+ &NumberOfHandles,
+ &HandleBuffer
+ );
if (!EFI_ERROR(Status)) {
- ASSERT (Esrt != NULL);
- EsrtEntry = (VOID *)(Esrt + 1);
- for (Index = 0; Index < Esrt->FwResourceCount; Index++, EsrtEntry++) {
- if (CompareGuid(&EsrtEntry->FwClass, &CapsuleHeader->CapsuleGuid)) {
- EsrtGuidFound = TRUE;
- break;
- }
- }
+ EsrtGuidFound = TRUE;
+ }
+ if (HandleBuffer != NULL) {
+ FreePool (HandleBuffer);
}
}
}
diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
index 9eb5033..1d94710 100644
--- a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
+++ b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf
@@ -73,7 +73,6 @@
[Guids]
gEfiFmpCapsuleGuid ## SOMETIMES_CONSUMES ## GUID
gWindowsUxCapsuleGuid ## SOMETIMES_CONSUMES ## GUID
- gEfiSystemResourceTableGuid ## SOMETIMES_CONSUMES ## GUID
## SOMETIMES_CONSUMES ## Variable:L"CapsuleMax"
## SOMETIMES_PRODUCES ## Variable:L"CapsuleMax"
gEfiCapsuleReportGuid