summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStar Zeng <star.zeng@intel.com>2018-04-13 17:55:14 +0800
committerStar Zeng <star.zeng@intel.com>2018-07-13 09:44:13 +0800
commit993fb9ee224d38f0370d34ea188d3e61ecedf687 (patch)
tree7d7c5d0a45341f7ccc76080407918b6ba8bde81d
parentc3e2883788dcb6ccb7196699a228e9bfde7ae722 (diff)
downloadedk2-993fb9ee224d38f0370d34ea188d3e61ecedf687.tar.gz
edk2-993fb9ee224d38f0370d34ea188d3e61ecedf687.tar.bz2
edk2-993fb9ee224d38f0370d34ea188d3e61ecedf687.zip
SignedCapsulePkg SystemFirmwareUpdateDxe: Fix failure caused by d69d922
d69d9227d046211265de1fab5580c50a65944614 caused system firmware update failure. It is because FindMatchingFmpHandles() is expected to return handles matched, but the function returns all handles found. This patch is to fix the issue. This patch also assigns mSystemFmpPrivate->Handle for "case 1:" path in case the Handle is needed by other place in future. Cc: Michael D Kinney <michael.d.kinney@intel.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Star Zeng <star.zeng@intel.com> Reviewed-by: Jiewen Yao <jiewen.yao@intel.com> Reviewed-by: Michael D Kinney <michael.d.kinney@intel.com> (cherry picked from commit 665bfd41ac32b364201c07dc1c5434432730c034)
-rw-r--r--SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.c21
1 files changed, 16 insertions, 5 deletions
diff --git a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.c b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.c
index d0b1c9913c..fa0c5f03ff 100644
--- a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.c
+++ b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdateDxe.c
@@ -602,6 +602,7 @@ FindMatchingFmpHandles (
)
{
EFI_STATUS Status;
+ UINTN TempHandleCount;
EFI_HANDLE *HandleBuffer;
UINTN Index;
UINTN Index2;
@@ -613,20 +614,20 @@ FindMatchingFmpHandles (
BOOLEAN MatchFound;
*HandleCount = 0;
+ TempHandleCount = 0;
HandleBuffer = NULL;
Status = gBS->LocateHandleBuffer (
ByProtocol,
ProtocolGuid,
NULL,
- HandleCount,
+ &TempHandleCount,
&HandleBuffer
);
if (EFI_ERROR (Status)) {
- *HandleCount = 0;
return NULL;
}
- for (Index = 0; Index < *HandleCount; Index++) {
+ for (Index = 0; Index < TempHandleCount; Index++) {
OriginalFmpImageInfoBuf = GetFmpImageDescriptors (
HandleBuffer[Index],
ProtocolGuid,
@@ -657,12 +658,21 @@ FindMatchingFmpHandles (
//
FmpImageInfoBuf = (EFI_FIRMWARE_IMAGE_DESCRIPTOR *)(((UINT8 *)FmpImageInfoBuf) + DescriptorSize);
}
- if (!MatchFound) {
- HandleBuffer[Index] = NULL;
+ if (MatchFound) {
+ HandleBuffer[*HandleCount] = HandleBuffer[Index];
+ (*HandleCount)++;
}
FreePool (OriginalFmpImageInfoBuf);
}
+
+ if ((*HandleCount) == 0) {
+ //
+ // No any matching handle.
+ //
+ FreePool (HandleBuffer);
+ return NULL;
+ }
return HandleBuffer;
}
@@ -801,6 +811,7 @@ SystemFirmwareUpdateMainDxe (
// Install System FMP protocol onto handle with matching FMP Protocol
//
DEBUG ((DEBUG_INFO, "SystemFirmwareUpdateDxe: Install System FMP onto matching FMP handle\n"));
+ mSystemFmpPrivate->Handle = HandleBuffer[0];
Status = gBS->InstallMultipleProtocolInterfaces (
&HandleBuffer[0],
&gSystemFmpProtocolGuid,