757 Commits

Author SHA1 Message Date
Mikhail Krichanov
3cf1979ad2 Ring3: Added SysCallHandleProtocol and
SIMPLE_FILE_SYSTEM_PROTOCOL wrapper.
2025-04-14 11:36:09 +03:00
Mikhail Krichanov
a00e407ac0 Ring3: Added SysCallCloseProtocol. 2025-04-14 11:36:09 +03:00
Mikhail Krichanov
3c7863e47e Ring3: Small fix. 2025-04-14 11:36:09 +03:00
Mikhail Krichanov
21b60e8dbe Ring3: Added BlockIo, DiskIo wrappers. 2025-04-14 11:36:09 +03:00
Mikhail Krichanov
d11ff4bebd Ring3: Some refactoring. 2025-04-14 11:36:09 +03:00
Mikhail Krichanov
4ea896a74f Ring3: Added Ring3BlockIo and Ring3DiskIo drafts. 2025-04-14 11:36:09 +03:00
Mikhail Krichanov
cc50bae593 Ring3: Refactored comparing of GUIDs. 2025-04-14 11:36:09 +03:00
Mikhail Krichanov
a44e2a5efa Ring3: Added SysCallFreePool,
fixed wrappers for EFI_DRIVER_BINDING_PROTOCOL.
2025-04-14 11:36:09 +03:00
Mikhail Krichanov
13d7a33127 Ring3: Refactored AllocateRing3CopyPages() and mUserDriverBinding. 2025-04-14 11:36:09 +03:00
Mikhail Krichanov
f0fb2003a2 Ring3: Refactored CallRing3(). 2025-04-14 11:36:09 +03:00
Mikhail Krichanov
01f038b49f Ring3: Added SysCallAllocatePool. 2025-04-14 11:36:06 +03:00
Mikhail Krichanov
f36554560b Ring3: Merged Ring3Dxe and Ring3UefiBootServicesTableLib into DxeRing3. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
702adc6292 Ring3: Refactored Ring3 initialization. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
27c04bb224 Ring3: Moved Ring3UefiBootServicesTableLib to Ring3Dxe. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
0171f0ceff Ring3: Added SysCallReturnToCore. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
8a16ce73a7 Ring3: Refactored EnterUserImage() into CallRing3(). 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
1b37dd79f6 Ring3: Fixed SysCallInstallMultipleProtocolInterfaces. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
2392881e22 Ring3: Added Ring3EntryPoint draft. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
ad33670b08 Ring3: Added SysCallInstallMultipleProtocolInterfaces draft. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
028342cb6b Ring3: Refactored stack operations. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
9d5ef4f68e Ring3: Refactored out FunctionAddress from API. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
b0c91ce70c Ring3: Refactored out AllocateRing3Pages() BootService. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
78fac6c238 Ring3: Refactored out AllocateCoreCopy() BootService. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
926f1b1b69 Ring3: Moved SysCall code to DxeCore. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
12cc1a9a5d Ring3: Added helper function AllocateCoreCopy(), refactored SysCall. 2025-04-14 11:23:05 +03:00
Mikhail Krichanov
e170598395 Ring3: Added helper function AllocateRing3Pages() and
draft of Ring3LocateProtocol().
2025-04-14 11:23:05 +03:00
Mikhail Krichanov
5bc84f06c0 Ring3: Fixed bug in calling Boot Service and did some refactoring. 2025-04-14 11:23:04 +03:00
Mikhail Krichanov
2fe010f40b Ring3: Added CoreSysCallStack. 2025-04-14 11:23:04 +03:00
Mikhail Krichanov
e36fd7b639 Ring3: Added SYSCALL draft. 2025-04-14 11:23:04 +03:00
Mikhail Krichanov
6f854f19e9 Ring3: Fixed LibraryConstructors' initialization and
allowed user to access ports.
2025-04-14 11:23:04 +03:00
Mikhail Krichanov
51e2c2a3e8 Ring3: Added EnterUserImage(). 2025-04-14 11:23:01 +03:00
Mikhail Krichanov
2fa2894bbd Ring3: Added GetMemoryAttributes() into EFI_CPU_ARCH_PROTOCOL. 2025-04-14 11:21:17 +03:00
Mikhail Krichanov
62eb73d711 Ring3: Added IsUserImage field into LOADED_IMAGE_PRIVATE_DATA structure. 2025-04-14 11:21:17 +03:00
Mikhail Krichanov
33f15b44de Ring3: Added EFI_MEMORY_USER attribute. 2025-04-14 11:21:14 +03:00
Mikhail Krichanov
992385e15e SecurePE: Defined new PcdImageProtectionPolicy. 2025-04-07 12:30:28 +03:00
Mikhail Krichanov
48b806f46f UE: Support UE generation and consumption. 2025-04-07 12:24:28 +03:00
Mikhail Krichanov
1fef202932 MdePkg/UefiImageLib: Introduce DebugAddress
Signed-off-by: Marvin Häuser <mhaeuser@posteo.de>
2025-04-07 12:24:27 +03:00
Mikhail Krichanov
e46d356fc9 MdePkg/UefiImageLib: Support multi-format and multi-source architecture
Signed-off-by: Marvin Häuser <mhaeuser@posteo.de>
2025-04-07 12:24:27 +03:00
Marvin Häuser
ec35a44c1e MdeModulePkg/DxeCore: Re-use ImageIsFromFv for memory protection 2025-04-07 12:24:27 +03:00
Mikhail Krichanov
51c4b78146 Revert "MdeModulePkg: Enable forward edge CFI in mem attributes table"
This reverts commit e4ef609319236a018c60b84f68d9d923c4ba383e.
2025-04-07 12:24:27 +03:00
Mikhail Krichanov
20dd836214 MdeModulePkg/Core/Dxe: Integrate CPU Architectural producer
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3223

In the current design, memory protection is not available till CpuDxe
is loaded. To resolve this, introduce CpuArchLib to move the
CPU Architectural initialization to DxeCore.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Cc: Rahul Kumar <rahul1.kumar@intel.com>
Cc: Vitaly Cheptsov <vit9696@protonmail.com>
Signed-off-by: Marvin Häuser <mhaeuser@posteo.de>
2025-04-07 12:23:28 +03:00
Marvin Häuser
f4778d6fdd EmulatorPkg: Fix some image loader related issues 2025-04-07 12:13:58 +03:00
Mikhail Krichanov
09a0c067d0 SecurePE: Replaced old PE loader with Secure one. 2025-04-07 12:12:35 +03:00
Mike Maslenkin
0f12a5f722 MdeModulePkg: fix warning about uninitialized variable
Handle.c:1302:24: error: 'Prot' may be used uninitialized
  in this function [-Werror=maybe-uninitialized]

       *Interface = Prot->Interface;
                    ~~~~^~~~~~~~~~~
cc1: all warnings being treated as errors

Signed-off-by: Mike Maslenkin <mike.maslenkin@gmail.com>
2025-01-29 17:20:57 +01:00
Chris Fernald
17e67d26d9 MdeModulePkg DxeMain: Add late initialization for Debug Agent.
Add a late initialize in DxeMain for the debug agent. This is required
for the debug agent to be able to setup events to handle image loads,
exit boot services, and other important callbacks.

Define a reinitialize debug agent.

Signed-off-by: Aaron Pop <aaronpop@microsoft.com>
2024-12-16 20:49:45 +00:00
Ard Biesheuvel
e8668d2dee MdeModulePkg/DxeCore: Call BeforeExitBootServices event group only once
According to UEFI spec 2.10 errata A section 7.4.6

  "All events from the EFI_EVENT_GROUP_BEFORE_EXIT_BOOT_SERVICES and
  EFI_EVENT_GROUP_EXIT_BOOT_SERVICES event notification groups as well
  as events of type EVT_SIGNAL_EXIT_BOOT_SERVICES must be signaled
  before ExitBootServices() returns EFI_SUCCESS. The events are only
  signaled once even if ExitBootServices() is called multiple times."

So keep track of whether ExitBootServices() has been called, and signal
the event group EFI_EVENT_GROUP_BEFORE_EXIT_BOOT_SERVICES only the first
time around.

EFI_EVENT_GROUP_EXIT_BOOT_SERVICES will only be signalled if
ExitBootServices() is going to run to [successful] completion, after
which calling it a second time is not possible anyway. So for this case,
no special handling is needed.

Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
2024-12-06 08:33:53 +08:00
Ken Lautner
964c22b8ea MdeModulePkg: Fix buffer overflow in MergeMemoryMap
Check that the next map entry is valid before dereferencing to merge the
guard pages. If the final entry is at the end of a page with no valid page
following it, then this can cause an access violation.

Signed-off-by: Kenneth Lautner <kenlautner3@gmail.com>
2024-09-13 07:53:57 +00:00
Ken Lautner
559affab2e MdeModulePkg: Fix redundant call to RestoreTpl()
Comments out a redundant call to RestoreTpl(). While this does not
technically violate spec on raise/restore TPL, TPL should already be at
the specified level. This extra call introduces an asymmetry between
RaiseTpl and RestoreTpl calls, which makes analysis of TPL correctness
more difficult and hampers certain non-standard TPL usages that some
platforms require.  Additionally, the two TPL variables were renamed to
provide context for each of them.

Signed-off-by: Kenneth Lautner <kenlautner3@gmail.com>
2024-09-04 00:53:54 +00:00
Xiaoqiang Zhang
0596e5fa05 MdeModulePkg: CoreValidateHandle Optimization
REF : https://bugzilla.tianocore.org/show_bug.cgi?id=4817

Before entering BIOS setup, CoreValidateHandle function executed
over 600,000 times during BDS phase on latest 8S server platform.
In CoreValidateHandle function, current implementation will go
through the doubly-linked list handle database in each call, and
this will have big impact on boot performance.
The optimization is using Red-black tree to store the EFI handle
address when insert each EFI handle into the handle database, and
remove the handle from Red-black tree if the handle is removed
from the handle database. CoreValidateHandle function changed to
go through the Red-black tree.
After verification on latest 8S server platform, BDS boot time can
save 20s+ after this change.

Cc: Ray Ni <ray.ni@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Cc: Liming Gao <gaoliming@byosoft.com.cn>
Signed-off-by: Andrew Fish <afish@apple.com>
Tested-by: Xiaoqiang Zhang <xiaoqiang.zhang@intel.com>
2024-08-30 11:42:41 +00:00
Oliver Smith-Denny
01735bbe4a MdeModulePkg: Gcd: Only Update gMemoryMap Attributes if Correct GCD Type
Currently whenever gDS->SetMemorySpaceCapabilities() is called, it
attempts to set the corresponding attributes in the gMemoryMap
descriptor. However, gMemoryMap only contains entries from GCD types
EfiGcdMemoryTypeSystemMemory and EfiGcdMemoryTypeMoreReliable, so
for all other types a failure is reported in the code. This is a
failure that is expected, so it does not provide value and can
lead to real failures being ignored.

This patch updates the gDS->SetMemorySpaceCapabilities() code to
only call into updating gMemoryMap if the GCD type is SystemMemory
or MoreReliable, to avoid spurious errors being reported. This
also avoids the expensive operation of searching through gMemoryMap
for entries we know we will fail to find.

Signed-off-by: Oliver Smith-Denny <osde@linux.microsoft.com>
2024-08-29 12:30:12 +00:00