Skip to content

Commit 5790921

Browse files
yyu-intel-comsuryasaimadhu
authored andcommitted
x86/insn: Add Control-flow Enforcement (CET) instructions to the opcode map
Add the following CET instructions to the opcode map: INCSSP: Increment Shadow Stack pointer (SSP). RDSSP: Read SSP into a GPR. SAVEPREVSSP: Use "previous ssp" token at top of current Shadow Stack (SHSTK) to create a "restore token" on the previous (outgoing) SHSTK. RSTORSSP: Restore from a "restore token" to SSP. WRSS: Write to kernel-mode SHSTK (kernel-mode instruction). WRUSS: Write to user-mode SHSTK (kernel-mode instruction). SETSSBSY: Verify the "supervisor token" pointed by MSR_IA32_PL0_SSP, set the token busy, and set then Shadow Stack pointer(SSP) to the value of MSR_IA32_PL0_SSP. CLRSSBSY: Verify the "supervisor token" and clear its busy bit. ENDBR64/ENDBR32: Mark a valid 64/32 bit control transfer endpoint. Detailed information of CET instructions can be found in Intel Software Developer's Manual. Signed-off-by: Yu-cheng Yu <[email protected]> Signed-off-by: Borislav Petkov <[email protected]> Reviewed-by: Adrian Hunter <[email protected]> Reviewed-by: Tony Luck <[email protected]> Acked-by: Masami Hiramatsu <[email protected]> Link: https://lkml.kernel.org/r/[email protected]
1 parent 630b99a commit 5790921

File tree

2 files changed

+22
-12
lines changed

2 files changed

+22
-12
lines changed

arch/x86/lib/x86-opcode-map.txt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ AVXcode: 1
366366
1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv
367367
1c: Grp20 (1A),(1C)
368368
1d:
369-
1e:
369+
1e: Grp21 (1A)
370370
1f: NOP Ev
371371
# 0x0f 0x20-0x2f
372372
20: MOV Rd,Cd
@@ -803,8 +803,8 @@ f0: MOVBE Gy,My | MOVBE Gw,Mw (66) | CRC32 Gd,Eb (F2) | CRC32 Gd,Eb (66&F2)
803803
f1: MOVBE My,Gy | MOVBE Mw,Gw (66) | CRC32 Gd,Ey (F2) | CRC32 Gd,Ew (66&F2)
804804
f2: ANDN Gy,By,Ey (v)
805805
f3: Grp17 (1A)
806-
f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v)
807-
f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v)
806+
f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v) | WRUSSD/Q My,Gy (66)
807+
f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v) | WRSSD/Q My,Gy
808808
f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v)
809809
f8: MOVDIR64B Gv,Mdqq (66) | ENQCMD Gv,Mdqq (F2) | ENQCMDS Gv,Mdqq (F3)
810810
f9: MOVDIRI My,Gy
@@ -970,7 +970,7 @@ GrpTable: Grp7
970970
2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) | ENCLU (111),(11B)
971971
3: LIDT Ms
972972
4: SMSW Mw/Rv
973-
5: rdpkru (110),(11B) | wrpkru (111),(11B)
973+
5: rdpkru (110),(11B) | wrpkru (111),(11B) | SAVEPREVSSP (F3),(010),(11B) | RSTORSSP Mq (F3) | SETSSBSY (F3),(000),(11B)
974974
6: LMSW Ew
975975
7: INVLPG Mb | SWAPGS (o64),(000),(11B) | RDTSCP (001),(11B)
976976
EndTable
@@ -1041,8 +1041,8 @@ GrpTable: Grp15
10411041
2: vldmxcsr Md (v1) | WRFSBASE Ry (F3),(11B)
10421042
3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B)
10431043
4: XSAVE | ptwrite Ey (F3),(11B)
1044-
5: XRSTOR | lfence (11B)
1045-
6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B)
1044+
5: XRSTOR | lfence (11B) | INCSSPD/Q Ry (F3),(11B)
1045+
6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B) | CLRSSBSY Mq (F3)
10461046
7: clflush | clflushopt (66) | sfence (11B)
10471047
EndTable
10481048

@@ -1077,6 +1077,11 @@ GrpTable: Grp20
10771077
0: cldemote Mb
10781078
EndTable
10791079

1080+
GrpTable: Grp21
1081+
1: RDSSPD/Q Ry (F3),(11B)
1082+
7: ENDBR64 (F3),(010),(11B) | ENDBR32 (F3),(011),(11B)
1083+
EndTable
1084+
10801085
# AMD's Prefetch Group
10811086
GrpTable: GrpP
10821087
0: PREFETCH

tools/arch/x86/lib/x86-opcode-map.txt

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -366,7 +366,7 @@ AVXcode: 1
366366
1b: BNDCN Gv,Ev (F2) | BNDMOV Ev,Gv (66) | BNDMK Gv,Ev (F3) | BNDSTX Ev,Gv
367367
1c: Grp20 (1A),(1C)
368368
1d:
369-
1e:
369+
1e: Grp21 (1A)
370370
1f: NOP Ev
371371
# 0x0f 0x20-0x2f
372372
20: MOV Rd,Cd
@@ -803,8 +803,8 @@ f0: MOVBE Gy,My | MOVBE Gw,Mw (66) | CRC32 Gd,Eb (F2) | CRC32 Gd,Eb (66&F2)
803803
f1: MOVBE My,Gy | MOVBE Mw,Gw (66) | CRC32 Gd,Ey (F2) | CRC32 Gd,Ew (66&F2)
804804
f2: ANDN Gy,By,Ey (v)
805805
f3: Grp17 (1A)
806-
f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v)
807-
f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v)
806+
f5: BZHI Gy,Ey,By (v) | PEXT Gy,By,Ey (F3),(v) | PDEP Gy,By,Ey (F2),(v) | WRUSSD/Q My,Gy (66)
807+
f6: ADCX Gy,Ey (66) | ADOX Gy,Ey (F3) | MULX By,Gy,rDX,Ey (F2),(v) | WRSSD/Q My,Gy
808808
f7: BEXTR Gy,Ey,By (v) | SHLX Gy,Ey,By (66),(v) | SARX Gy,Ey,By (F3),(v) | SHRX Gy,Ey,By (F2),(v)
809809
f8: MOVDIR64B Gv,Mdqq (66) | ENQCMD Gv,Mdqq (F2) | ENQCMDS Gv,Mdqq (F3)
810810
f9: MOVDIRI My,Gy
@@ -970,7 +970,7 @@ GrpTable: Grp7
970970
2: LGDT Ms | XGETBV (000),(11B) | XSETBV (001),(11B) | VMFUNC (100),(11B) | XEND (101)(11B) | XTEST (110)(11B) | ENCLU (111),(11B)
971971
3: LIDT Ms
972972
4: SMSW Mw/Rv
973-
5: rdpkru (110),(11B) | wrpkru (111),(11B)
973+
5: rdpkru (110),(11B) | wrpkru (111),(11B) | SAVEPREVSSP (F3),(010),(11B) | RSTORSSP Mq (F3) | SETSSBSY (F3),(000),(11B)
974974
6: LMSW Ew
975975
7: INVLPG Mb | SWAPGS (o64),(000),(11B) | RDTSCP (001),(11B)
976976
EndTable
@@ -1041,8 +1041,8 @@ GrpTable: Grp15
10411041
2: vldmxcsr Md (v1) | WRFSBASE Ry (F3),(11B)
10421042
3: vstmxcsr Md (v1) | WRGSBASE Ry (F3),(11B)
10431043
4: XSAVE | ptwrite Ey (F3),(11B)
1044-
5: XRSTOR | lfence (11B)
1045-
6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B)
1044+
5: XRSTOR | lfence (11B) | INCSSPD/Q Ry (F3),(11B)
1045+
6: XSAVEOPT | clwb (66) | mfence (11B) | TPAUSE Rd (66),(11B) | UMONITOR Rv (F3),(11B) | UMWAIT Rd (F2),(11B) | CLRSSBSY Mq (F3)
10461046
7: clflush | clflushopt (66) | sfence (11B)
10471047
EndTable
10481048

@@ -1077,6 +1077,11 @@ GrpTable: Grp20
10771077
0: cldemote Mb
10781078
EndTable
10791079

1080+
GrpTable: Grp21
1081+
1: RDSSPD/Q Ry (F3),(11B)
1082+
7: ENDBR64 (F3),(010),(11B) | ENDBR32 (F3),(011),(11B)
1083+
EndTable
1084+
10801085
# AMD's Prefetch Group
10811086
GrpTable: GrpP
10821087
0: PREFETCH

0 commit comments

Comments
 (0)