Skip to content
Browse files

x86, fpu, amd: Clear exceptions in AMD FXSAVE workaround

Before we do an EMMS in the AMD FXSAVE information leak workaround we
need to clear any pending exceptions, otherwise we trap with a
floating-point exception inside this code.

Reported-by: halfdog <>
Tested-by: Borislav Petkov <>
Signed-off-by: H. Peter Anvin <>
  • Loading branch information...
torvalds authored and H. Peter Anvin committed Jan 12, 2014
1 parent 1739f09 commit 26bef1318adc1b3a530ecc807ef99346db2aa8b0
Showing with 7 additions and 6 deletions.
  1. +7 −6 arch/x86/include/asm/fpu-internal.h
@@ -293,12 +293,13 @@ static inline int restore_fpu_checking(struct task_struct *tsk)
/* AMD K7/K8 CPUs don't save/restore FDP/FIP/FOP unless an exception
is pending. Clear the x87 state here by setting it to fixed
values. "m" is a random variable that should be in L1 */
"emms\n\t" /* clear stack tags */
"fildl %P[addr]", /* set F?P to defined value */
[addr] "m" (tsk->thread.fpu.has_fpu));
if (unlikely(static_cpu_has(X86_FEATURE_FXSAVE_LEAK))) {
asm volatile(
"fildl %P[addr]" /* set F?P to defined value */
: : [addr] "m" (tsk->thread.fpu.has_fpu));

return fpu_restore_checking(&tsk->thread.fpu);

0 comments on commit 26bef13

Please sign in to comment.
You can’t perform that action at this time.