Compensate missing return address, which is a 4-byte on i686 and an 8-byte on amd64

Tento commit je obsažen v:
Rafal Kupiec 2023-11-05 20:07:13 +01:00
rodič ba833422b0
revize 91ce0f9947
Podepsáno: belliash
ID GPG klíče: 4E829243E0CFE6B4
4 změnil soubory, kde provedl 8 přidání a 2 odebrání

Zobrazit soubor

@ -133,6 +133,9 @@
#define KTRAP_FRAME_ALIGN 0x10
#define KTRAP_FRAME_SIZE sizeof(KTRAP_FRAME)
/* Return address size pushed by 'call' instruction */
#define KRETURN_ADDRESS_SIZE 0x8
/* Size of legacy 387 registers */
#define SIZE_OF_80387_REGISTERS 80

Zobrazit soubor

@ -162,6 +162,9 @@
/* Number of supported extensions */
#define MAXIMUM_SUPPORTED_EXTENSION 512
/* Return address size pushed by 'call' instruction */
#define KRETURN_ADDRESS_SIZE 0x4
/* Size of 387 registers */
#define SIZE_OF_80387_REGISTERS 80
#define SIZE_OF_FX_REGISTERS 128

Zobrazit soubor

@ -105,6 +105,6 @@ KepSwitchBootStack(IN ULONG_PTR Stack)
"jmp KepStartKernel\n"
:
: "m" (Stack),
"i" (FLOATING_SAVE_AREA_SIZE | KEXCEPTION_FRAME_SIZE | KSWITCH_FRAME_SIZE),
"i" (FLOATING_SAVE_AREA_SIZE | KEXCEPTION_FRAME_SIZE | KSWITCH_FRAME_SIZE | KRETURN_ADDRESS_SIZE),
"p" (KepStartKernel));
}

Zobrazit soubor

@ -106,7 +106,7 @@ KepSwitchBootStack(IN ULONG_PTR Stack)
"jmp _KepStartKernel@0\n"
:
: "m" (Stack),
"i" (KTRAP_FRAME_ALIGN | KTRAP_FRAME_SIZE | NPX_FRAME_SIZE),
"i" (KTRAP_FRAME_ALIGN | KTRAP_FRAME_SIZE | NPX_FRAME_SIZE | KRETURN_ADDRESS_SIZE),
"i" (CR0_EM | CR0_MP | CR0_TS),
"p" (KepStartKernel));
}