CLRSSBSY
— Clear Busy Flag in a Supervisor Shadow Stack Token
Opcode/Instruction |
Op / En |
64/32 bit Mode Support |
CPUID Feature Flag |
Description |
F3 0F AE /6 CLRSSBSY m64 |
M |
V/V |
CET_SS |
Clear busy flag in supervisor shadow stack token reference by m64. |
Instruction Operand Encoding
¶
Op/En |
Tuple Type |
Operand 1 |
Operand 2 |
Operand 3 |
Operand 4 |
M |
N/A |
ModRM:r/m (r, w) |
N/A |
N/A |
N/A |
Description
¶
Clear busy flag in supervisor shadow stack token reference by m64. Subsequent to marking the shadow stack as not busy the SSP is loaded with value 0.
Operation
¶
IF (CR4.CET = 0)
THEN #UD; FI;
IF (IA32_S_CET.SH_STK_EN = 0)
THEN #UD; FI;
IF CPL > 0
THEN GP(0); FI;
SSP_LA = Linear_Address(mem operand)
IF SSP_LA not aligned to 8 bytes
THEN #GP(0); FI;
expected_token_value=SSP_LA|BUSY_BIT (*busybit-bitposition0-mustbeset*)
new_token_value = SSP_LA (* Clear the busy bit *)
IF shadow_stack_lock_cmpxchg8b(SSP_LA, new_token_value, expected_token_value) != expected_token_value
invalid_token := 1; FI
(* Set the CF if invalid token was detected *)
RFLAGS.CF = (invalid_token == 1) ? 1 : 0;
RFLAGS.ZF,PF,AF,OF,SF := 0;
SSP := 0
Flags Affected
¶
CF is set if an invalid token was detected, else it is cleared. ZF, PF, AF, OF, and SF are cleared.
Protected Mode Exceptions
¶
#UD |
If the LOCK prefix is used. |
If CR4.CET = 0. |
IF IA32_S_CET.SH_STK_EN = 0. |
#GP(0) |
If memory operand linear address not aligned to 8 bytes. |
If a memory operand effective address is outside the CS, DS, ES, FS, or GS segment limit. |
If destination is located in a non-writeable segment. |
If the DS, ES, FS, or GS register is used to access memory and it contains a NULL segment selector. |
If CPL is not 0. |
#SS(0) |
If a memory operand effective address is outside the SS segment limit. |
#PF(fault-code) |
If a page fault occurs. |
Real-Address Mode Exceptions
¶
#UD |
The CLRSSBSY instruction is not recognized in real-address mode. |
Virtual-8086 Mode Exceptions
¶
#UD |
The CLRSSBSY instruction is not recognized in virtual-8086 mode. |
Compatibility Mode Exceptions
¶
#UD |
Same exceptions as in protected mode. |
#GP(0) |
Same exceptions as in protected mode. |
#PF(fault-code) |
If a page fault occurs. |
64-Bit Mode Exceptions
¶
#UD |
If the LOCK prefix is used. |
If CR4.CET = 0. |
IF IA32_S_CET.SH_STK_EN = 0. |
#GP(0) |
If memory operand linear address not aligned to 8 bytes. |
If CPL is not 0. |
If the memory address is in a non-canonical form. |
If token is invalid. |
#SS(0) |
If a memory address referencing the SS segment is in a non-canonical form. |
#PF(fault-code) |
If a page fault occurs. |