• Daniel Glöckner's avatar
    x86, math-emu: fix init_fpu for task != current · ab9e1858
    Daniel Glöckner authored
    Impact: fix math-emu related crash while using GDB/ptrace
    
    init_fpu() calls finit to initialize a task's xstate, while finit always
    works on the current task. If we use PTRACE_GETFPREGS on another
    process and both processes did not already use floating point, we get
    a null pointer exception in finit.
    
    This patch creates a new function finit_task that takes a task_struct
    parameter. finit becomes a wrapper that simply calls finit_task with
    current. On the plus side this avoids many calls to get_current which
    would each resolve to an inline assembler mov instruction.
    
    An empty finit_task has been added to i387.h to avoid linker errors in
    case the compiler still emits the call in init_fpu when
    CONFIG_MATH_EMULATION is not defined.
    
    The declaration of finit in i387.h has been removed as the remaining
    code using this function gets its prototype from fpu_proto.h.
    Signed-off-by: default avatarDaniel Glöckner <dg@emlix.com>
    Cc: Suresh Siddha <suresh.b.siddha@intel.com>
    Cc: "Pallipadi Venkatesh" <venkatesh.pallipadi@intel.com>
    Cc: Arjan van de Ven <arjan@infradead.org>
    Cc: Bill Metzenthen <billm@melbpc.org.au>
    LKML-Reference: <E1Lew31-0004il-Fg@mailer.emlix.com>
    Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
    ab9e1858
i387.h 10.2 KB