Opcode/ Instruction |
Op/ En |
64/32 bit Mode Support |
CPUID Feature Flag |
Description |
F3 0F 01 E8 SETSSBSY |
ZO |
V/V |
CET_SS |
Set busy flag in supervisor shadow stack token reference by IA32_PL0_SSP. |
Op/En |
Operand 1 |
Operand 2 |
Operand 3 |
Operand 4 |
ZO |
N/A |
N/A |
N/A |
N/A |
The SETSSBSY instruction verifies the presence of a non-busy supervisor shadow stack token at the address in the IA32_PL0_SSP MSR and marks it busy. Following successful execution of the instruction, the SSP is set to the value of the IA32_PL0_SSP MSR.
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 = IA32_PL0_SSP If SSP_LA not aligned to 8 bytes THEN #GP(0); FI; expected_token_value = SSP_LA (* busy bit must not be set *) new_token_value = SSP_LA | BUSY_BIT (* set busy bit; bit position 0 *) IF shadow_stack_lock_cmpxchg8B(SSP_LA, new_token_value, expected_token_value) != expected_token_value THEN #CP(SETSSBSY); FI; SSP = SSP_LA
None.
SETSSBSYvoid _setssbsy(void);
#UD |
If the LOCK prefix is used. If CR4.CET = 0. IF IA32_S_CET.SH_STK_EN = 0. |
#GP(0) |
If IA32_PL0_SSP not aligned to 8 bytes. If CPL is not 0. |
#CP(setssbsy) |
If busy bit in token is set. If in 32-bit or compatibility mode, and the address in token is not below 4G. |
#PF(fault-code) |
If a page fault occurs. |
#UD |
The SETSSBSY instruction is not recognized in real-address mode. |
#UD |
The SETSSBSY instruction is not recognized in virtual-8086 mode. |
Same as protected mode exceptions.
Same as protected mode exceptions.