Ring3: Fixed LibraryConstructors' initialization and

allowed user to access ports.
This commit is contained in:
Mikhail Krichanov 2024-01-18 14:00:47 +03:00
parent 98de0a212e
commit 233a5cff09
3 changed files with 15 additions and 0 deletions

View File

@ -193,6 +193,8 @@
gEfiMdeModulePkgTokenSpaceGuid.PcdImageLargeAddressLoad ## CONSUMES
gEfiMdePkgTokenSpaceGuid.PcdDebugRaisePropertyMask ## CONSUMES
gEfiMdePkgTokenSpaceGuid.PcdImageProtectionPolicy ## CONSUMES
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaBase ## CONSUMES
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaSize ## CONSUMES
# [Hob]
# RESOURCE_DESCRIPTOR ## CONSUMES

View File

@ -1714,6 +1714,15 @@ CoreStartImage (
TopOfStack = ALIGN_POINTER (TopOfStack, CPU_STACK_ALIGNMENT);
// DEBUG ((DEBUG_ERROR, "RING3_CODE64_SEL = 0x%x RING3_DATA64_SEL = 0x%x\n", (UINT16)RING3_CODE64_SEL, (UINT16)RING3_DATA64_SEL));
//
// Necessary fix for ProcessLibraryConstructorList() -> DxeCcProbeLibConstructor()
//
SetUefiImageMemoryAttributes (
FixedPcdGet32 (PcdOvmfWorkAreaBase),
FixedPcdGet32 (PcdOvmfWorkAreaSize),
EFI_MEMORY_XP | EFI_MEMORY_USER
);
EnterUserImage (
(SWITCH_STACK_ENTRY_POINT)(UINTN)Image->EntryPoint,
ImageHandle,

View File

@ -992,6 +992,10 @@ CreateIdentityMappingPageTables (
Eflags.UintN = AsmReadEflags ();
Eflags.Bits.AC = 0;
//
// Allow user image to access ports.
//
Eflags.Bits.IOPL = 3;
AsmWriteEflags (Eflags.UintN);
}