Skip to content

Commit 97eab4d

Browse files
committed
Fix MXCSR configuration dependent timing
Some data-independent timing vector instructions may have subtle data-dependent timing due to MXCSR configuration; dependent on (potentially secret) data instruction retirement may be delayed by one cycle.
1 parent 82cd953 commit 97eab4d

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

library/std/src/sys/sgx/abi/entry.S

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ IMAGE_BASE:
2626
.Lxsave_clear:
2727
.org .+24
2828
.Lxsave_mxcsr:
29-
.short 0x1f80
29+
.short 0x1fbf
3030

3131
/* We can store a bunch of data in the gap between MXCSR and the XSAVE header */
3232

@@ -178,6 +178,7 @@ sgx_entry:
178178
mov $-1, %rax
179179
mov $-1, %rdx
180180
xrstor .Lxsave_clear(%rip)
181+
lfence
181182
mov %r10, %rdx
182183

183184
/* check if returning from usercall */
@@ -311,6 +312,9 @@ usercall:
311312
movq $0,%gs:tcsls_last_rsp
312313
/* restore callee-saved state, cf. "save" above */
313314
mov %r11,%rsp
315+
/* MCDT mitigation requires an lfence after ldmxcsr _before_ any of the affected */
316+
/* vector instructions is used. We omit the lfence here as one is required before */
317+
/* the jmp instruction anyway. */
314318
ldmxcsr (%rsp)
315319
fldcw 4(%rsp)
316320
add $8, %rsp

0 commit comments

Comments
 (0)