lkml.org 
[lkml]   [2014]   [Jan]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.4 23/27] x86, fpu, amd: Clear exceptions in AMD FXSAVE workaround
    Date
    3.4-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Linus Torvalds <torvalds@linux-foundation.org>

    commit 26bef1318adc1b3a530ecc807ef99346db2aa8b0 upstream.

    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 <me@halfdog.net>
    Tested-by: Borislav Petkov <bp@suse.de>
    Link: http://lkml.kernel.org/r/CA%2B55aFxQnY_PCG_n4=0w-VG=YLXL-yr7oMxyy0WU2gCBAf3ydg@mail.gmail.com
    Signed-off-by: H. Peter Anvin <hpa@zytor.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/include/asm/fpu-internal.h | 13 +++++++------
    1 file changed, 7 insertions(+), 6 deletions(-)

    --- a/arch/x86/include/asm/fpu-internal.h
    +++ b/arch/x86/include/asm/fpu-internal.h
    @@ -266,12 +266,13 @@ static inline int restore_fpu_checking(s
    /* 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 */
    - alternative_input(
    - ASM_NOP8 ASM_NOP2,
    - "emms\n\t" /* clear stack tags */
    - "fildl %P[addr]", /* set F?P to defined value */
    - X86_FEATURE_FXSAVE_LEAK,
    - [addr] "m" (tsk->thread.fpu.has_fpu));
    + if (unlikely(static_cpu_has(X86_FEATURE_FXSAVE_LEAK))) {
    + asm volatile(
    + "fnclex\n\t"
    + "emms\n\t"
    + "fildl %P[addr]" /* set F?P to defined value */
    + : : [addr] "m" (tsk->thread.fpu.has_fpu));
    + }

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



    \
     
     \ /
      Last update: 2014-01-14 08:41    [W:4.080 / U:0.376 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site