Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b22cbe40 authored by Yu-cheng Yu's avatar Yu-cheng Yu Committed by Ingo Molnar
Browse files

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: default avatarRobert O'Callahan <robert@ocallahan.org>
Signed-off-by: default avatarYu-cheng Yu <yu-cheng.yu@intel.com>
Cc: <stable@vger.kernel.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Borislav Petkov <bp@suse.de>
Cc: David Hansen <dave.hansen@linux.intel.com>
Cc: Fenghua Yu <fenghua.yu@intel.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Ravi V. Shankar <ravi.v.shankar@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1479402695-6553-1-git-send-email-yu-cheng.yu@intel.com


Signed-off-by: default avatarIngo Molnar <mingo@kernel.org>
parent ed68d7e9
Loading
Loading
Loading
Loading
+8 −8
Original line number Diff line number Diff line
@@ -521,14 +521,14 @@ void fpu__clear(struct fpu *fpu)
{
	WARN_ON_FPU(fpu != &current->thread.fpu); /* Almost certainly an anomaly */

	if (!use_eager_fpu() || !static_cpu_has(X86_FEATURE_FPU)) {
		/* FPU state will be reallocated lazily at the first use. */
	fpu__drop(fpu);
	} else {
		if (!fpu->fpstate_active) {

	/*
	 * Make sure fpstate is cleared and initialized.
	 */
	if (static_cpu_has(X86_FEATURE_FPU)) {
		fpu__activate_curr(fpu);
		user_fpu_begin();
		}
		copy_init_fpstate_to_fpregs();
	}
}