From d704a3c6e771f47809d3b5cc400c3f068eed2736 Mon Sep 17 00:00:00 2001 From: Mikhail Krichanov Date: Mon, 26 Feb 2024 11:37:39 +0300 Subject: [PATCH] Ring3: Fixed missing Ring3Call result. --- MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c | 15 ++++++++------- .../Core/Dxe/SysCall/X64/CoreBootServices.nasm | 1 + 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c b/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c index ff5414ec10..db933998ee 100644 --- a/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c +++ b/MdeModulePkg/Core/Dxe/DxeRing3/DxeRing3.c @@ -122,6 +122,7 @@ Ring3Call ( IN RING3_CALL_DATA *Data ) { + EFI_STATUS Status; FUNCTION_0 Function0; FUNCTION_1 Function1; FUNCTION_2 Function2; @@ -132,33 +133,33 @@ Ring3Call ( switch (Data->NumberOfArguments) { case 0: Function0 = (FUNCTION_0)Data->EntryPoint; - Function0 (); + Status = Function0 (); break; case 1: Function1 = (FUNCTION_1)Data->EntryPoint; - Function1 (Data->Arguments[0]); + Status = Function1 (Data->Arguments[0]); break; case 2: Function2 = (FUNCTION_2)Data->EntryPoint; - Function2 (Data->Arguments[0], Data->Arguments[1]); + Status = Function2 (Data->Arguments[0], Data->Arguments[1]); break; case 3: Function3 = (FUNCTION_3)Data->EntryPoint; - Function3 (Data->Arguments[0], Data->Arguments[1], Data->Arguments[2]); + Status = Function3 (Data->Arguments[0], Data->Arguments[1], Data->Arguments[2]); break; case 4: Function4 = (FUNCTION_4)Data->EntryPoint; - Function4 (Data->Arguments[0], Data->Arguments[1], Data->Arguments[2], Data->Arguments[3]); + Status = Function4 (Data->Arguments[0], Data->Arguments[1], Data->Arguments[2], Data->Arguments[3]); break; case 5: Function5 = (FUNCTION_5)Data->EntryPoint; - Function5 (Data->Arguments[0], Data->Arguments[1], Data->Arguments[2], Data->Arguments[3], Data->Arguments[4]); + Status = Function5 (Data->Arguments[0], Data->Arguments[1], Data->Arguments[2], Data->Arguments[3], Data->Arguments[4]); break; default: break; } - SysCall (SysCallReturnToCore); + SysCall (SysCallReturnToCore, Status); } EFI_STATUS diff --git a/MdeModulePkg/Core/Dxe/SysCall/X64/CoreBootServices.nasm b/MdeModulePkg/Core/Dxe/SysCall/X64/CoreBootServices.nasm index 0987cf9320..79ba899087 100644 --- a/MdeModulePkg/Core/Dxe/SysCall/X64/CoreBootServices.nasm +++ b/MdeModulePkg/Core/Dxe/SysCall/X64/CoreBootServices.nasm @@ -223,6 +223,7 @@ o64 sysret coreReturnAddress: mov rsp, [ASM_PFX(CoreRsp)] mov rbp, [ASM_PFX(CoreRbp)] + mov rax, rdx ret SECTION .data