mirror of
https://github.com/LongSoft/UEFITool.git
synced 2025-05-14 23:24:49 -04:00
Add hack for broken NVRAM store sizes in Apple images
This commit is contained in:
parent
47637ef152
commit
1e1d5c6e17
2 changed files with 16 additions and 1 deletions
|
@ -1010,7 +1010,7 @@ USTATUS FfsParser::parseVolumeHeader(const UByteArray & volume, const UINT32 loc
|
|||
return U_INVALID_PARAMETER;
|
||||
|
||||
// Check that there is space for the volume header
|
||||
if ((UINT32)volume.size() < sizeof(EFI_FIRMWARE_VOLUME_HEADER)) {
|
||||
if ((UINT32)volume.size() < sizeof(EFI_FIRMWARE_VOLUME_HEADER)) {
|
||||
msg(usprintf("%s: input volume size %Xh (%u) is smaller than volume header size 40h (64)", __FUNCTION__, volume.size(), volume.size()));
|
||||
return U_INVALID_VOLUME;
|
||||
}
|
||||
|
@ -1279,6 +1279,17 @@ USTATUS FfsParser::findNextRawAreaItem(const UModelIndex & index, const UINT32 l
|
|||
nextItemType = Types::Volume;
|
||||
nextItemSize = (UINT32)volumeHeader->FvLength;
|
||||
nextItemOffset = offset - EFI_FV_SIGNATURE_OFFSET;
|
||||
|
||||
// Hack for Apple images with an extra zero typo in NVRAM volume size.
|
||||
uint32_t appleWrongSize = 0x2F0000;
|
||||
uint32_t appleRightSize = 0x2EFC0;
|
||||
if ((volumeHeader->FvLength == appleWrongSize)
|
||||
&& UByteArray((const char *)&volumeHeader->FileSystemGuid, sizeof(EFI_GUID)) == NVRAM_MAIN_STORE_VOLUME_GUID
|
||||
&& UByteArray((const char *)volumeHeader + appleRightSize + sizeof(EFI_GUID), sizeof(EFI_GUID)) == APPLE_UNKNOWN_STORE_VOLUME_GUID) {
|
||||
msg(usprintf("%s: hack, fixing up NVRAM volume size from %Xh to %Xh", __FUNCTION__, volumeHeader->FvLength, appleRightSize), index);
|
||||
nextItemSize = appleRightSize;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue