Skip to content

Commit b22cbe4

Browse files
yyu-intel-comIngo Molnar
authored andcommitted
x86/fpu: Fix invalid FPU ptrace state after execve()
Robert O'Callahan reported that after an execve PTRACE_GETREGSET NT_X86_XSTATE continues to return the pre-exec register values until the exec'ed task modifies FPU state. The test code is at: https://bugzilla.redhat.com/attachment.cgi?id=1164286. What is happening is fpu__clear() does not properly clear fpstate. Fix it by doing just that. Reported-by: Robert O'Callahan <[email protected]> Signed-off-by: Yu-cheng Yu <[email protected]> Cc: <[email protected]> Cc: Andy Lutomirski <[email protected]> Cc: Borislav Petkov <[email protected]> Cc: David Hansen <[email protected]> Cc: Fenghua Yu <[email protected]> Cc: Linus Torvalds <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: Ravi V. Shankar <[email protected]> Cc: Thomas Gleixner <[email protected]> Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Ingo Molnar <[email protected]>
1 parent ed68d7e commit b22cbe4

File tree

1 file changed

+8
-8
lines changed

1 file changed

+8
-8
lines changed

arch/x86/kernel/fpu/core.c

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -521,14 +521,14 @@ void fpu__clear(struct fpu *fpu)
521521
{
522522
WARN_ON_FPU(fpu != &current->thread.fpu); /* Almost certainly an anomaly */
523523

524-
if (!use_eager_fpu() || !static_cpu_has(X86_FEATURE_FPU)) {
525-
/* FPU state will be reallocated lazily at the first use. */
526-
fpu__drop(fpu);
527-
} else {
528-
if (!fpu->fpstate_active) {
529-
fpu__activate_curr(fpu);
530-
user_fpu_begin();
531-
}
524+
fpu__drop(fpu);
525+
526+
/*
527+
* Make sure fpstate is cleared and initialized.
528+
*/
529+
if (static_cpu_has(X86_FEATURE_FPU)) {
530+
fpu__activate_curr(fpu);
531+
user_fpu_begin();
532532
copy_init_fpstate_to_fpregs();
533533
}
534534
}

0 commit comments

Comments
 (0)