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. |
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 |
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.
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 (* busy bit - bit position 0 - must be set *) 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
CF is set if an invalid token was detected, else it is cleared. ZF, PF, AF, OF, and SF are cleared.
#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. |
#UD | The CLRSSBSY instruction is not recognized in real-address mode. |
#UD | The CLRSSBSY instruction is not recognized in virtual-8086 mode. |
#UD | Same exceptions as in protected mode. |
#GP(0) | Same exceptions as in protected mode. |
#PF(fault-code) | If a page fault occurs. |
#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. |