lkml.org 
[lkml]   [2015]   [May]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.12 063/155] x86/fpu: Drop_fpu() should not assume that tsk equals current
    Date
    From: Oleg Nesterov <oleg@redhat.com>

    3.12-stable review patch. If anyone has any objections, please let me know.

    ===============

    commit f4c3686386393c120710dd34df2a74183ab805fd upstream.

    drop_fpu() does clear_used_math() and usually this is correct
    because tsk == current.

    However switch_fpu_finish()->restore_fpu_checking() is called before
    __switch_to() updates the "current_task" variable. If it fails,
    we will wrongly clear the PF_USED_MATH flag of the previous task.

    So use clear_stopped_child_used_math() instead.

    Signed-off-by: Oleg Nesterov <oleg@redhat.com>
    Signed-off-by: Borislav Petkov <bp@suse.de>
    Reviewed-by: Rik van Riel <riel@redhat.com>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Borislav Petkov <bp@alien8.de>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Fenghua Yu <fenghua.yu@intel.com>
    Cc: H. Peter Anvin <hpa@zytor.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Pekka Riikonen <priikone@iki.fi>
    Cc: Quentin Casasnovas <quentin.casasnovas@oracle.com>
    Cc: Suresh Siddha <sbsiddha@gmail.com>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Link: http://lkml.kernel.org/r/20150309171041.GB11388@redhat.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Jiri Slaby <jslaby@suse.cz>
    ---
    arch/x86/include/asm/fpu-internal.h | 2 +-
    1 file changed, 1 insertion(+), 1 deletion(-)

    diff --git a/arch/x86/include/asm/fpu-internal.h b/arch/x86/include/asm/fpu-internal.h
    index 5be9f879957f..18cd5ed4e1ba 100644
    --- a/arch/x86/include/asm/fpu-internal.h
    +++ b/arch/x86/include/asm/fpu-internal.h
    @@ -368,7 +368,7 @@ static inline void drop_fpu(struct task_struct *tsk)
    preempt_disable();
    tsk->fpu_counter = 0;
    __drop_fpu(tsk);
    - clear_used_math();
    + clear_stopped_child_used_math(tsk);
    preempt_enable();
    }

    --
    2.3.4


    \
     
     \ /
      Last update: 2015-05-04 15:21    [W:4.196 / U:0.084 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site