diff options
author | Kinney, Michael D <michael.d.kinney@intel.com> | 2018-02-06 17:43:32 -0800 |
---|---|---|
committer | Michael D Kinney <michael.d.kinney@intel.com> | 2018-02-11 16:35:15 -0800 |
commit | 7f0301e39a11852c8c26b6a700f0a3a0c381e95c (patch) | |
tree | 787d5d67c846298446d6d8c586c2e19653ad1738 /MdeModulePkg/Library/DxeCapsuleLibFmp | |
parent | 48ed4769fcfb524315d60ff745973ea3c8525ff5 (diff) | |
download | edk2-7f0301e39a11852c8c26b6a700f0a3a0c381e95c.tar.gz edk2-7f0301e39a11852c8c26b6a700f0a3a0c381e95c.tar.bz2 edk2-7f0301e39a11852c8c26b6a700f0a3a0c381e95c.zip |
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.c | 25 | ||||
-rw-r--r-- | MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.inf | 1 |
2 files changed, 14 insertions, 12 deletions
diff --git a/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c b/MdeModulePkg/Library/DxeCapsuleLibFmp/DxeCapsuleLib.c index 56c8e98b84..15dbc00216 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 9eb50337a2..1d947101d3 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
|