mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-25 14:44:28 +02:00
Core/Dxe: Added sanity checks.
This commit is contained in:
parent
519bffe4f9
commit
10cb3149cd
@ -1701,6 +1701,7 @@ CoreStartImage (
|
|||||||
if (gRing3Data == NULL) {
|
if (gRing3Data == NULL) {
|
||||||
Image->Status = InitializeRing3 (ImageHandle, Image);
|
Image->Status = InitializeRing3 (ImageHandle, Image);
|
||||||
if (EFI_ERROR (Image->Status)) {
|
if (EFI_ERROR (Image->Status)) {
|
||||||
|
DEBUG ((DEBUG_ERROR, "Core: Failed to initialize User address space - %r.\n", Image->Status));
|
||||||
CpuDeadLoop ();
|
CpuDeadLoop ();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
@ -66,7 +66,7 @@ SysCallBootService (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
MakeUserPageTableTemplate (
|
MakeUserPageTableTemplate (
|
||||||
OUT UINTN *UserPageTableTemplate,
|
OUT UINTN *UserPageTableTemplate,
|
||||||
@ -77,9 +77,8 @@ MakeUserPageTableTemplate (
|
|||||||
VOID *MemorySizeHob;
|
VOID *MemorySizeHob;
|
||||||
|
|
||||||
MemorySizeHob = GetFirstGuidHob (&gArmVirtSystemMemorySizeGuid);
|
MemorySizeHob = GetFirstGuidHob (&gArmVirtSystemMemorySizeGuid);
|
||||||
ASSERT (MemorySizeHob != NULL);
|
|
||||||
if (MemorySizeHob == NULL) {
|
if (MemorySizeHob == NULL) {
|
||||||
return;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
Descriptor.PhysicalBase = PcdGet64 (PcdSystemMemoryBase);
|
Descriptor.PhysicalBase = PcdGet64 (PcdSystemMemoryBase);
|
||||||
@ -87,11 +86,11 @@ MakeUserPageTableTemplate (
|
|||||||
Descriptor.Length = *(UINT64 *)GET_GUID_HOB_DATA (MemorySizeHob);
|
Descriptor.Length = *(UINT64 *)GET_GUID_HOB_DATA (MemorySizeHob);
|
||||||
Descriptor.Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
|
Descriptor.Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
|
||||||
|
|
||||||
ArmMakeUserPageTableTemplate (
|
return ArmMakeUserPageTableTemplate (
|
||||||
&Descriptor,
|
&Descriptor,
|
||||||
UserPageTableTemplate,
|
UserPageTableTemplate,
|
||||||
UserPageTableTemplateSize
|
UserPageTableTemplateSize
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -118,7 +117,6 @@ InitializePlatform (
|
|||||||
&Physical
|
&Physical
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "Core: Failed to allocate memory for Ring3 ConfigurationTable.\n"));
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -93,7 +93,7 @@ SysCallBootService (
|
|||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
MakeUserPageTableTemplate (
|
MakeUserPageTableTemplate (
|
||||||
OUT UINTN *UserPageTableTemplate,
|
OUT UINTN *UserPageTableTemplate,
|
||||||
@ -104,9 +104,8 @@ MakeUserPageTableTemplate (
|
|||||||
VOID *MemorySizeHob;
|
VOID *MemorySizeHob;
|
||||||
|
|
||||||
MemorySizeHob = GetFirstGuidHob (&gArmVirtSystemMemorySizeGuid);
|
MemorySizeHob = GetFirstGuidHob (&gArmVirtSystemMemorySizeGuid);
|
||||||
ASSERT (MemorySizeHob != NULL);
|
|
||||||
if (MemorySizeHob == NULL) {
|
if (MemorySizeHob == NULL) {
|
||||||
return;
|
return EFI_NOT_FOUND;
|
||||||
}
|
}
|
||||||
|
|
||||||
Descriptor.PhysicalBase = PcdGet64 (PcdSystemMemoryBase);
|
Descriptor.PhysicalBase = PcdGet64 (PcdSystemMemoryBase);
|
||||||
@ -114,11 +113,11 @@ MakeUserPageTableTemplate (
|
|||||||
Descriptor.Length = *(UINT64 *)GET_GUID_HOB_DATA (MemorySizeHob);
|
Descriptor.Length = *(UINT64 *)GET_GUID_HOB_DATA (MemorySizeHob);
|
||||||
Descriptor.Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
|
Descriptor.Attributes = ARM_MEMORY_REGION_ATTRIBUTE_WRITE_BACK;
|
||||||
|
|
||||||
ArmMakeUserPageTableTemplate (
|
return ArmMakeUserPageTableTemplate (
|
||||||
&Descriptor,
|
&Descriptor,
|
||||||
UserPageTableTemplate,
|
UserPageTableTemplate,
|
||||||
UserPageTableTemplateSize
|
UserPageTableTemplateSize
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
@ -143,7 +142,6 @@ InitializePlatform (
|
|||||||
&Physical
|
&Physical
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "Core: Failed to allocate memory for Ring3 ConfigurationTable.\n"));
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
|
|
||||||
extern EXCEPTION_ADDRESSES *mExceptionAddresses;
|
extern EXCEPTION_ADDRESSES *mExceptionAddresses;
|
||||||
|
|
||||||
VOID
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
MakeUserPageTableTemplate (
|
MakeUserPageTableTemplate (
|
||||||
OUT UINTN *UserPageTableTemplate,
|
OUT UINTN *UserPageTableTemplate,
|
||||||
@ -45,7 +45,9 @@ MakeUserPageTableTemplate (
|
|||||||
|
|
||||||
TotalPagesNum = NumberOfPdpEntriesNeeded + 1;
|
TotalPagesNum = NumberOfPdpEntriesNeeded + 1;
|
||||||
PageAddress = (UINTN)AllocatePages (TotalPagesNum);
|
PageAddress = (UINTN)AllocatePages (TotalPagesNum);
|
||||||
ASSERT (PageAddress != 0);
|
if (PageAddress == 0) {
|
||||||
|
return EFI_OUT_OF_RESOURCES;
|
||||||
|
}
|
||||||
|
|
||||||
PageMap = (VOID *)PageAddress;
|
PageMap = (VOID *)PageAddress;
|
||||||
PageAddress += SIZE_4KB;
|
PageAddress += SIZE_4KB;
|
||||||
@ -87,6 +89,8 @@ MakeUserPageTableTemplate (
|
|||||||
|
|
||||||
*UserPageTableTemplate = (UINTN)PageMap;
|
*UserPageTableTemplate = (UINTN)PageMap;
|
||||||
*UserPageTableTemplateSize = EFI_PAGES_TO_SIZE (TotalPagesNum);
|
*UserPageTableTemplateSize = EFI_PAGES_TO_SIZE (TotalPagesNum);
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
@ -19,7 +19,7 @@ STATIC UEFI_IMAGE_RECORD *mDxeRing3;
|
|||||||
STATIC EFI_PHYSICAL_ADDRESS mCoreStackBase;
|
STATIC EFI_PHYSICAL_ADDRESS mCoreStackBase;
|
||||||
STATIC UINT64 mCoreStackSize;
|
STATIC UINT64 mCoreStackSize;
|
||||||
|
|
||||||
VOID
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
MakeUserPageTableTemplate (
|
MakeUserPageTableTemplate (
|
||||||
OUT UINTN *UserPageTableTemplate,
|
OUT UINTN *UserPageTableTemplate,
|
||||||
@ -60,7 +60,6 @@ InitializeRing3 (
|
|||||||
&Physical
|
&Physical
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "Core: Failed to allocate memory for Ring3Data.\n"));
|
|
||||||
return Status;
|
return Status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +97,6 @@ InitializeRing3 (
|
|||||||
&Physical
|
&Physical
|
||||||
);
|
);
|
||||||
if (EFI_ERROR (Status)) {
|
if (EFI_ERROR (Status)) {
|
||||||
DEBUG ((DEBUG_ERROR, "Core: Failed to allocate memory for Ring3Interfaces.\n"));
|
|
||||||
CoreFreePages (
|
CoreFreePages (
|
||||||
(EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Data,
|
(EFI_PHYSICAL_ADDRESS)(UINTN)gRing3Data,
|
||||||
EFI_SIZE_TO_PAGES (sizeof (RING3_DATA))
|
EFI_SIZE_TO_PAGES (sizeof (RING3_DATA))
|
||||||
@ -150,6 +148,7 @@ InitializeUserPageTable (
|
|||||||
IN LOADED_IMAGE_PRIVATE_DATA *Image
|
IN LOADED_IMAGE_PRIVATE_DATA *Image
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
EFI_STATUS Status;
|
||||||
UINTN UserPageTable;
|
UINTN UserPageTable;
|
||||||
UINTN UserPageTableSize;
|
UINTN UserPageTableSize;
|
||||||
UEFI_IMAGE_RECORD_SEGMENT *ImageRecordSegment;
|
UEFI_IMAGE_RECORD_SEGMENT *ImageRecordSegment;
|
||||||
@ -157,10 +156,11 @@ InitializeUserPageTable (
|
|||||||
UINT32 Index;
|
UINT32 Index;
|
||||||
UEFI_IMAGE_RECORD *UserImageRecord;
|
UEFI_IMAGE_RECORD *UserImageRecord;
|
||||||
|
|
||||||
//
|
Status = MakeUserPageTableTemplate (&UserPageTable, &UserPageTableSize);
|
||||||
// TODO: Remove ASSERTs, add proper checks and return status.
|
if (EFI_ERROR (Status)) {
|
||||||
//
|
DEBUG ((DEBUG_ERROR, "Core: Failed to initialize User page table - %r.\n", Status));
|
||||||
MakeUserPageTableTemplate (&UserPageTable, &UserPageTableSize);
|
CpuDeadLoop ();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Map gRing3Data, gRing3Interfaces, DxeRing3
|
// Map gRing3Data, gRing3Interfaces, DxeRing3
|
||||||
|
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
extern EXCEPTION_ADDRESSES *mExceptionAddresses;
|
extern EXCEPTION_ADDRESSES *mExceptionAddresses;
|
||||||
|
|
||||||
VOID
|
EFI_STATUS
|
||||||
EFIAPI
|
EFIAPI
|
||||||
MakeUserPageTableTemplate (
|
MakeUserPageTableTemplate (
|
||||||
OUT UINTN *UserPageTableTemplate,
|
OUT UINTN *UserPageTableTemplate,
|
||||||
@ -159,8 +159,7 @@ MakeUserPageTableTemplate (
|
|||||||
|
|
||||||
BigPageAddress = (UINTN)AllocatePages (TotalPagesNum);
|
BigPageAddress = (UINTN)AllocatePages (TotalPagesNum);
|
||||||
if (BigPageAddress == 0) {
|
if (BigPageAddress == 0) {
|
||||||
DEBUG ((DEBUG_ERROR, "Core: Could not allocate buffer for User page table.\n"));
|
return EFI_OUT_OF_RESOURCES;
|
||||||
CpuDeadLoop ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@ -284,6 +283,8 @@ MakeUserPageTableTemplate (
|
|||||||
|
|
||||||
*UserPageTableTemplate = (UINTN)PageMap;
|
*UserPageTableTemplate = (UINTN)PageMap;
|
||||||
*UserPageTableTemplateSize = EFI_PAGES_TO_SIZE (TotalPagesNum);
|
*UserPageTableTemplateSize = EFI_PAGES_TO_SIZE (TotalPagesNum);
|
||||||
|
|
||||||
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
EFI_STATUS
|
EFI_STATUS
|
||||||
|
Loading…
x
Reference in New Issue
Block a user