From 963696a41bce441ee4defdb846c6e735b15625c2 Mon Sep 17 00:00:00 2001 From: Roland McGrath Date: Wed, 30 Jan 2008 13:30:06 +0100 Subject: [PATCH] --- yaml --- r: 79711 b: refs/heads/master c: 83bd01024b1fdfc41d9b758e5669e80fca72df66 h: refs/heads/master i: 79709: e7ab36bd2ec2f7923c21d1cb0b00e39beff5e296 79707: a861994ed5d4576d4b428a90b3e39c56c42ae612 79703: 93ff2e0e5ef50664caf1b46dfb62b8db66012ead 79695: 1506c9b6eea8502355e84584887e29e2e5f70f9d 79679: 8cb61a47267e80ef335bde3698d08d2c057fa17c v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/signal_32.c | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 5707709ba845..ae242e4e0705 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: f9fc58910ebc448b0b7d37af1bf57a896a78e9c4 +refs/heads/master: 83bd01024b1fdfc41d9b758e5669e80fca72df66 diff --git a/trunk/arch/x86/kernel/signal_32.c b/trunk/arch/x86/kernel/signal_32.c index 20f29e4c1d33..5c6170c44b00 100644 --- a/trunk/arch/x86/kernel/signal_32.c +++ b/trunk/arch/x86/kernel/signal_32.c @@ -295,6 +295,13 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs * regs, size_t frame_size) /* Default to using normal stack */ esp = regs->esp; + /* + * If we are on the alternate signal stack and would overflow it, don't. + * Return an always-bogus address instead so we will die with SIGSEGV. + */ + if (on_sig_stack(esp) && !likely(on_sig_stack(esp - frame_size))) + return (void __user *) -1L; + /* This is the X/Open sanctioned signal stack switching. */ if (ka->sa.sa_flags & SA_ONSTACK) { if (sas_ss_flags(esp) == 0)