An exec() after using an XFD-controlled xfeature resets fpu->fpstate to its embedded storage without freeing the dynamically allocated state. Fix the leak in fpstate_reset() and add an AMX regression selftest.
The fix preserves the old pointer, installs and initializes the embedded fpstate, and then frees the detached allocation. Since fpstate_reset() now owns cleanup, fpu_clone() initializes dst_fpu->fpstate to NULL before invoking it. The selftest performs ten XTILEDATA request, XRSTOR and self-exec cycles in the same task and checks the associated /proc/vmallocinfo entries. It fails with 10 leaked allocations on the unfixed kernel and passes with zero on the fixed kernel. Changes since v1: - Rename the fix and describe the memory leak explicitly. - Move cleanup into fpstate_reset(). - Detach the old fpstate before freeing it. - Initialize dst_fpu->fpstate to NULL before resetting it. - Add the requested AMX regression selftest as a separate patch. v1: https://lore.kernel.org/r/[email protected] Guixiong Wei (2): x86/fpu: Fix memory leak with dynamic fpstate and exec() selftests/x86/amx: Test dynamic fpstate cleanup across exec() arch/x86/include/asm/fpu/api.h | 6 +- arch/x86/kernel/fpu/core.c | 5 ++ arch/x86/kernel/fpu/xstate.c | 10 +-- arch/x86/kernel/process.c | 2 +- tools/testing/selftests/x86/amx.c | 144 +++++++++++++++++++++++++++++- 5 files changed, 156 insertions(+), 11 deletions(-) base-commit: 72d3fcf802c45d00b300f25b848a93c3a2bd7c7e -- 2.50.1 (Apple Git-155)

