diff --git a/MsvmPkg/MsvmPkgAARCH64.dsc b/MsvmPkg/MsvmPkgAARCH64.dsc index 48dccb27c..645e66254 100644 --- a/MsvmPkg/MsvmPkgAARCH64.dsc +++ b/MsvmPkg/MsvmPkgAARCH64.dsc @@ -355,7 +355,7 @@ [PcdsFixedAtBuild.common] # Advanced Logger Config - gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerPreMemPages|1 # Size is 4KB + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerPreMemPages|8 # Size is 32KB gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerPages|1024 # Size is 4MB !if $(DEBUGLIB_SERIAL) == 1 !ifdef DEBUG_NOISY diff --git a/MsvmPkg/MsvmPkgX64.dsc b/MsvmPkg/MsvmPkgX64.dsc index a62c04c22..2c048ac43 100644 --- a/MsvmPkg/MsvmPkgX64.dsc +++ b/MsvmPkg/MsvmPkgX64.dsc @@ -376,7 +376,7 @@ # Original value: 0xFA000000 # gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerBase|0x0 - gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerPreMemPages|1 # Size is 4KB + gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerPreMemPages|8 # Size is 32KB gAdvLoggerPkgTokenSpaceGuid.PcdAdvancedLoggerPages|1024 # Size is 4MB !if $(DEBUGLIB_SERIAL) == 1 !ifdef DEBUG_NOISY diff --git a/MsvmPkg/PlatformPei/AArch64/Mmu.c b/MsvmPkg/PlatformPei/AArch64/Mmu.c index 093beaf4c..20e6860b9 100644 --- a/MsvmPkg/PlatformPei/AArch64/Mmu.c +++ b/MsvmPkg/PlatformPei/AArch64/Mmu.c @@ -418,7 +418,7 @@ ConfigureMmu( return EFI_INVALID_PARAMETER; } - DEBUG((DEBUG_VERBOSE, "ConfigureMmu(0x%lx, 0x%lx, 0x%lx, 0x%lx)\n", + DEBUG((DEBUG_INFO, "ConfigureMmu(0x%lx, 0x%lx, 0x%lx, 0x%lx)\n", MaxAddress, lowMmioSize, highMmioBaseAddress, highMmioSize)); // diff --git a/MsvmPkg/PlatformPei/Config.c b/MsvmPkg/PlatformPei/Config.c index fbadf1598..f3e788e25 100644 --- a/MsvmPkg/PlatformPei/Config.c +++ b/MsvmPkg/PlatformPei/Config.c @@ -1561,6 +1561,47 @@ Return Value: PEI_FAIL_FAST_IF_FAILED(PcdSet64S(PcdLowMmioGapSizeInPages, mmioRanges->Ranges[lowGap].MmioSizeInPages)); PEI_FAIL_FAST_IF_FAILED(PcdSet64S(PcdHighMmioGapBasePageNumber, mmioRanges->Ranges[highGap].MmioPageNumberStart)); PEI_FAIL_FAST_IF_FAILED(PcdSet64S(PcdHighMmioGapSizeInPages, mmioRanges->Ranges[highGap].MmioSizeInPages)); + + // Log resolved MMIO PCDs in bytes; SafeUint64Mult guards the page-to-byte conversion. + { + UINT64 lowBaseBytes; + UINT64 lowSizeBytes; + UINT64 highBaseBytes; + UINT64 highSizeBytes; + + if (RETURN_ERROR(SafeUint64Mult(mmioRanges->Ranges[lowGap].MmioPageNumberStart, (UINT64)SIZE_4KB, &lowBaseBytes)) || + RETURN_ERROR(SafeUint64Mult(mmioRanges->Ranges[lowGap].MmioSizeInPages, (UINT64)SIZE_4KB, &lowSizeBytes))) + { + DEBUG((DEBUG_WARN, + "ConfigMmio: LowGap (pages) base=0x%lx size=0x%lx (byte conversion overflow)\n", + mmioRanges->Ranges[lowGap].MmioPageNumberStart, + mmioRanges->Ranges[lowGap].MmioSizeInPages)); + } + else + { + DEBUG((DEBUG_INFO, + "ConfigMmio: LowGap base=0x%lx size=0x%lx\n", + lowBaseBytes, + lowSizeBytes)); + } + + if (RETURN_ERROR(SafeUint64Mult(mmioRanges->Ranges[highGap].MmioPageNumberStart, (UINT64)SIZE_4KB, &highBaseBytes)) || + RETURN_ERROR(SafeUint64Mult(mmioRanges->Ranges[highGap].MmioSizeInPages, (UINT64)SIZE_4KB, &highSizeBytes))) + { + DEBUG((DEBUG_WARN, + "ConfigMmio: HighGap (pages) base=0x%lx size=0x%lx (byte conversion overflow)\n", + mmioRanges->Ranges[highGap].MmioPageNumberStart, + mmioRanges->Ranges[highGap].MmioSizeInPages)); + } + else + { + DEBUG((DEBUG_INFO, + "ConfigMmio: HighGap base=0x%lx size=0x%lx\n", + highBaseBytes, + highSizeBytes)); + } + } + requiredStructures.UefiConfigMmioRanges = 1; break; } diff --git a/MsvmPkg/VmbfsDxe/Vmbfs.c b/MsvmPkg/VmbfsDxe/Vmbfs.c index d6700a59a..f190513fa 100644 --- a/MsvmPkg/VmbfsDxe/Vmbfs.c +++ b/MsvmPkg/VmbfsDxe/Vmbfs.c @@ -155,6 +155,8 @@ Return Value: goto Cleanup; } + ZeroMem(fileSystemInformation->PacketBuffer, VMBFS_MAXIMUM_MESSAGE_SIZE); + status = gBS->AllocatePool(EfiBootServicesData, sizeof(*allocatedFileProtocol), (void**)&allocatedFileProtocol); if (EFI_ERROR(status)) @@ -219,10 +221,7 @@ Return Value: if (bytesRead != sizeof(*VersionResponseMessage) || VersionResponseMessage->Header.Type != VmbfsMessageTypeVersionResponse) { - - VMBFS_BAD_HOST; - status = EFI_DEVICE_ERROR; - goto Cleanup; + FAIL_FAST_UNEXPECTED_HOST_BEHAVIOR(); } if (VersionResponseMessage->Status != VmbfsVersionSupported) diff --git a/MsvmPkg/VmbfsDxe/VmbfsDxe.inf b/MsvmPkg/VmbfsDxe/VmbfsDxe.inf index 7e4822a1e..9ad1e0ff8 100644 --- a/MsvmPkg/VmbfsDxe/VmbfsDxe.inf +++ b/MsvmPkg/VmbfsDxe/VmbfsDxe.inf @@ -36,6 +36,7 @@ [LibraryClasses] BaseLib BaseMemoryLib + CrashLib DebugLib EmclLib MemoryAllocationLib diff --git a/MsvmPkg/VmbfsDxe/VmbfsEfi.h b/MsvmPkg/VmbfsDxe/VmbfsEfi.h index be61831d7..ea89416a7 100644 --- a/MsvmPkg/VmbfsDxe/VmbfsEfi.h +++ b/MsvmPkg/VmbfsDxe/VmbfsEfi.h @@ -23,13 +23,12 @@ #include #include #include +#include #include #include #include -#define VMBFS_BAD_HOST ASSERT(FALSE) - #define GetPacketBuffer(fileInformation, Type) ((Type*)((fileInformation)->FileSystem->FileSystemInformation.PacketBuffer)) #define GetPacketSize(fileInformation) (((fileInformation)->FileSystem->FileSystemInformation.PacketSize)) #define GetFileSystemInformation(fileInformation) (&((fileInformation)->FileSystem->FileSystemInformation)) diff --git a/MsvmPkg/VmbfsDxe/VmbfsFile.c b/MsvmPkg/VmbfsDxe/VmbfsFile.c index b22e7e1ad..e916da5d6 100644 --- a/MsvmPkg/VmbfsDxe/VmbfsFile.c +++ b/MsvmPkg/VmbfsDxe/VmbfsFile.c @@ -85,8 +85,7 @@ Return Value: if (BufferLength > VMBFS_MAXIMUM_MESSAGE_SIZE) { - VMBFS_BAD_HOST; - BufferLength = MIN(BufferLength, VMBFS_MAXIMUM_MESSAGE_SIZE); + FAIL_FAST_UNEXPECTED_HOST_BEHAVIOR(); } CopyMem(fileSystemInformation->PacketBuffer, Buffer, BufferLength); @@ -381,10 +380,7 @@ Return Value: if (bytesRead != sizeof(*getFileInfoResponseMessage) || getFileInfoResponseMessage->Header.Type != VmbfsMessageTypeGetFileInfoResponse) { - - VMBFS_BAD_HOST; - status = EFI_DEVICE_ERROR; - goto Cleanup; + FAIL_FAST_UNEXPECTED_HOST_BEHAVIOR(); } if (getFileInfoResponseMessage->Status == VmbfsFileNotFound) @@ -591,9 +587,7 @@ Return Value: if (bytesReceived < sizeof(*readFileResponseMessage) || readFileResponseMessage->Header.Type != VmbfsMessageTypeReadFileResponse) { - VMBFS_BAD_HOST; - status = EFI_DEVICE_ERROR; - goto Cleanup; + FAIL_FAST_UNEXPECTED_HOST_BEHAVIOR(); } status = VmbfsErrorToEfiError(readFileResponseMessage->Status); @@ -605,9 +599,7 @@ Return Value: bytesReceived -= sizeof(VMBFS_MESSAGE_READ_FILE_RESPONSE); if (bytesReceived > bytesRequested) { - VMBFS_BAD_HOST; - status = EFI_DEVICE_ERROR; - goto Cleanup; + FAIL_FAST_UNEXPECTED_HOST_BEHAVIOR(); } CopyMem((UINT8*)Buffer, @@ -702,9 +694,7 @@ Return Value: if (bytesReceived < sizeof(*readFileResponseMessage) || readFileResponseMessage->Header.Type != VmbfsMessageTypeReadFileRdmaResponse) { - VMBFS_BAD_HOST; - status = EFI_DEVICE_ERROR; - goto Cleanup; + FAIL_FAST_UNEXPECTED_HOST_BEHAVIOR(); } status = VmbfsErrorToEfiError(readFileResponseMessage->Status); @@ -715,9 +705,7 @@ Return Value: if (readFileResponseMessage->ByteCount > bytesRequested) { - VMBFS_BAD_HOST; - status = EFI_DEVICE_ERROR; - goto Cleanup; + FAIL_FAST_UNEXPECTED_HOST_BEHAVIOR(); } *BytesRead = readFileResponseMessage->ByteCount;