• Thomas Gleixner's avatar
    signal: Add an optional check for altstack size · 1bdda24c
    Thomas Gleixner authored
    New x86 FPU features will be very large, requiring ~10k of stack in
    signal handlers.  These new features require a new approach called
    "dynamic features".
    
    The kernel currently tries to ensure that altstacks are reasonably
    sized. Right now, on x86, sys_sigaltstack() requires a size of >=2k.
    However, that 2k is a constant. Simply raising that 2k requirement
    to >10k for the new features would break existing apps which have a
    compiled-in size of 2k.
    
    Instead of universally enforcing a larger stack, prohibit a process from
    using dynamic features without properly-sized altstacks. This must be
    enforced in two places:
    
     * A dynamic feature can not be enabled without an large-enough altstack
       for each process thread.
     * Once a dynamic feature is enabled, any request to install a too-small
       altstack will be rejected
    
    The dynamic feature enabling code must examine each thread in a
    process to ensure that the altstacks are large enough. Add a new lock
    (sigaltstack_lock()) to ensure that threads can not race and change
    their altstack after being examined.
    
    Add the infrastructure in form of a config option and provide empty
    stubs for architectures which do not need dynamic altstack size checks.
    
    This implementation will be fleshed out for x86 in a future patch called
    
      x86/arch_prctl: Add controls for dynamic XSTATE components
    
      [dhansen: commit message. ]
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarChang S. Bae <chang.seok.bae@intel.com>
    Signed-off-by: default avatarBorislav Petkov <bp@suse.de>
    Link: https://lkml.kernel.org/r/20211021225527.10184-2-chang.seok.bae@intel.com
    1bdda24c
signal.c 123 KB