diff --git a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.c b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.c index d31eaaa66a..53352881c4 100644 --- a/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.c +++ b/MdeModulePkg/Universal/FaultTolerantWriteDxe/FaultTolerantWrite.c @@ -451,7 +451,9 @@ FtwWrite ( Record->Offset = Offset; Record->Length = Length; Record->FvBaseAddress = FvbPhysicalAddress; - CopyMem ((Record + 1), PrivateData, Header->PrivateDataSize); + if (PrivateData != NULL) { + CopyMem ((Record + 1), PrivateData, Header->PrivateDataSize); + } MyOffset = (UINT8 *) Record - FtwDevice->FtwWorkSpace; MyLength = RECORD_SIZE (Header->PrivateDataSize); @@ -828,22 +830,14 @@ FtwGetLastWrite ( // If this record SpareComplete has not set, then it can not restart. // if (Record->SpareComplete != FTW_VALID_STATE) { - if (IsFirstRecordOfWrites (Header, Record)) { - // - // The First record cannot be restart and target is still healthy, - // so abort() is a safe solution. - // + Status = GetPreviousRecordOfWrites (Header, &Record); + if (EFI_ERROR (Status)) { FtwAbort (This); - *Complete = TRUE; return EFI_NOT_FOUND; - } else { - // - // Step back to the previous record - // - GetPreviousRecordOfWrites (Header, &Record); } } + // // Fill all the requested values // diff --git a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c index f89d6ed1c9..98da3b8b79 100644 --- a/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c +++ b/MdeModulePkg/Universal/Variable/RuntimeDxe/Variable.c @@ -2051,7 +2051,7 @@ FvbNotificationEvent ( // // Get the FVB to access variable store // - for (Index = 0; Index < HandleCount; Index += 1, Status = EFI_NOT_FOUND) { + for (Index = 0; Index < HandleCount; Index += 1, Status = EFI_NOT_FOUND, Fvb = NULL) { Status = gBS->HandleProtocol ( HandleBuffer[Index], &gEfiFirmwareVolumeBlockProtocolGuid, @@ -2086,7 +2086,7 @@ FvbNotificationEvent ( } FreePool (HandleBuffer); - if (!EFI_ERROR (Status)) { + if (!EFI_ERROR (Status) && Fvb != NULL) { Status = VariableCommonInitialize (Fvb); ASSERT_EFI_ERROR (Status);