[PATCH v4 0/2] x86/fpu: Fix dynamic fpstate leak on exec()

From: Guixiong Wei

Date: Mon Nov 02 2026 - 05:14:27 EST


An exec() after using an XFD-controlled xfeature leaks the dynamically
allocated fpstate. Fix the cleanup in fpstate_reset() and add an AMX
regression selftest.

The selftest reports FAIL on an unfixed kernel (10/10 FAILs on 7.1.3),
SKIP when vmallocinfo addresses are hidden, and OK with the fix applied.

Changes since v3:
- Close the use-after-free that freeing in fpstate_reset() exposed.
fpu_flush_thread() called fpstate_reset() before
fpu_reset_fpstate_regs() set TIF_NEED_FPU_LOAD, so a context switch
or a kernel FPU user in that window could still see live register
state and save it into the freed buffer. Set TIF_NEED_FPU_LOAD before
the reset and document on fpstate_reset() that callers operating on
the current task must prevent such a save. The race was caught by
the Sashiko review and the fix was suggested by Chang S. Bae.

v3: https://lore.kernel.org/r/cover.1793072271.git.weiguixiong@xxxxxxxxxxxxx
v2: https://lore.kernel.org/r/cover.1791428412.git.weiguixiong@xxxxxxxxxxxxx
v1: https://lore.kernel.org/r/20260929151013.81562-2-weiguixiong@xxxxxxxxxxxxx

Guixiong Wei (2):
x86/fpu: Fix memory leak with dynamic fpstate and exec()
selftests/x86/amx: Test dynamic fpstate cleanup across exec()

arch/x86/kernel/fpu/core.c | 12 ++
tools/testing/selftests/x86/amx.c | 251 +++++++++++++++++++++++++++++-
2 files changed, 261 insertions(+), 2 deletions(-)


base-commit: 72d3fcf802c45d00b300f25b848a93c3a2bd7c7e
--
2.55.0