blob: b93ca1611034a7b57813d002dc2b3ad18eea576b (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
%define MSR_S_CET 0x6A2
%define MSR_S_CET_SH_STK_EN 0x1
%define CR4_CET (1 << 23)
%define N_CR4_CET 23
DEFAULT REL
SECTION .text
align 16
global ASM_PFX(AsmDisableCet)
ASM_PFX(AsmDisableCet):
mov ecx, MSR_S_CET
rdmsr
test al, MSR_S_CET_SH_STK_EN
jz .SsDone ; if z, shadow stack not enabled
; Pop pushed data for 'call'
mov rax, 1
incsspq rax
.SsDone:
mov rax, cr4
btr eax, N_CR4_CET ; clear CR4_CET
mov cr4, rax
ret
align 16
global ASM_PFX(AsmEnableCet)
ASM_PFX(AsmEnableCet):
mov rax, cr4
bts eax, N_CR4_CET ; set CR4_CET
mov cr4, rax
; Use jmp to skip check for 'ret'
pop rax
jmp rax
|