Reviewed-by: jiewen....@intel.com
> -----Original Message----- > From: Zeng, Star > Sent: Friday, April 13, 2018 6:06 PM > To: edk2-devel@lists.01.org > Cc: Zeng, Star <star.z...@intel.com>; Kinney, Michael D > <michael.d.kin...@intel.com>; Yao, Jiewen <jiewen....@intel.com> > Subject: [PATCH] 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.kin...@intel.com> > Cc: Jiewen Yao <jiewen....@intel.com> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Star Zeng <star.z...@intel.com> > --- > .../SystemFirmwareUpdate/SystemFirmwareUpdateDxe.c | 21 > ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git > a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdate > Dxe.c > b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdat > eDxe.c > index d0b1c9913ca8..fa0c5f03ffdd 100644 > --- > a/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdate > Dxe.c > +++ > b/SignedCapsulePkg/Universal/SystemFirmwareUpdate/SystemFirmwareUpdat > eDxe.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, > -- > 2.7.0.windows.1 _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel