[patch V3 00/20] x86/fpu: Clean up exception fixups and error handling in sigframe related code

From: Thomas Gleixner
Date: Wed Sep 08 2021 - 09:29:26 EST


A recent discussion [1] about hardware poisoning unearthed some short
comings in the error handling of the sigframe related FPU code:

- The error exit for exceptions other than #PF is obfuscated

- The error code return values of the various functions are pointless
because all callers just care about success or failure and the error
codes are never propagated to user space.

- Some of the buffer clearing happens needlessly inside of page fault
disabled regions.

- The MCE aware exception fixup is inconsistent and confusing especially
in copy_mc_64.c. It uses a fixup function which stores the trap number
in regs->ax just to overwrite regs->ax at the callsite specific fixup.

The following series cleans this up. The resulting excecutable code is
slightly smaller with that.

It's also available in git:

git://git.kernel.org/pub/scm/linux/kernel/git/tglx/devel.git x86/fpu

Changes vs. V2 [2]:

- Fix the bogus left over check for #PF which causes boot failures

Thanks,

tglx

[1] https://lore.kernel.org/r/87r1edgs2w.ffs@tglx
[2] https://lore.kernel.org/20210907200722.067068005@xxxxxxxxxxxxx

---
arch/x86/ia32/ia32_signal.c | 14 +-
arch/x86/include/asm/asm.h | 49 ++++-----
arch/x86/include/asm/extable.h | 44 +++++---
arch/x86/include/asm/extable_fixup_types.h | 22 ++++
arch/x86/include/asm/fpu/internal.h | 84 ++++++++++------
arch/x86/include/asm/msr.h | 4
arch/x86/include/asm/segment.h | 2
arch/x86/kernel/cpu/mce/core.c | 40 ++------
arch/x86/kernel/cpu/mce/internal.h | 14 --
arch/x86/kernel/cpu/mce/severity.c | 22 ++--
arch/x86/kernel/fpu/signal.c | 144 ++++++++++++++---------------
arch/x86/kernel/signal.c | 18 +--
arch/x86/lib/copy_mc_64.S | 8 -
arch/x86/mm/extable.c | 131 ++++++++++----------------
arch/x86/net/bpf_jit_comp.c | 11 --
scripts/sorttable.c | 4
16 files changed, 301 insertions(+), 310 deletions(-)