x86/signal: Detect and prevent an alternate signal stack overflow
The kernel pushes context on to the userspace stack to prepare for the user's signal handler. When the user has supplied an alternate signal stack, via sigaltstack(2), it is easy for the kernel to verify that the stack size is sufficient for the current hardware context. Check if writing the hardware context to the alternate stack will exceed it's size. If yes, then instead of corrupting user-data and proceeding with the original signal handler, an immediate SIGSEGV signal is delivered. Refactor the stack pointer check code from on_sig_stack() and use the new helper. While the kernel allows new source code to discover and use a sufficient alternate signal stack size, this check is still necessary to protect binaries with insufficient alternate signal stack size from data corruption. Fixes: c2bc11f1 ("x86, AVX-512: Enable AVX-512 States Context Switch") Reported-by:Florian Weimer <fweimer@redhat.com> Suggested-by:
Jann Horn <jannh@google.com> Suggested-by:
Andy Lutomirski <luto@kernel.org> Signed-off-by:
Chang S. Bae <chang.seok.bae@intel.com> Signed-off-by:
Borislav Petkov <bp@suse.de> Reviewed-by:
Len Brown <len.brown@intel.com> Acked-by:
Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/20210518200320.17239-6-chang.seok.bae@intel.com Link: https://bugzilla.kernel.org/show_bug.cgi?id=153531
Loading
Please register or sign in to comment