John David Anglin wrote: > On 24-Nov-12, at 10:05 AM, John David Anglin wrote: > > In trying to build the debian libsigsegv2 package, I found that > > sigaltstack > > doesn't round ss.ss_sp. The tests intentionally pass an unaligned > > pointer. > > This results in the two stack overflow tests failing. > > The attached patch fixes this issue. diff --git a/arch/parisc/kernel/signal.c b/arch/parisc/kernel/signal.c index 594459b..324644d 100644 --- a/arch/parisc/kernel/signal.c +++ b/arch/parisc/kernel/signal.c @@ -188,8 +188,10 @@ get_sigframe(struct k_sigaction *ka, unsigned long sp, size_t frame_size) DBG(1,"get_sigframe: ka = %#lx, sp = %#lx, frame_size = %#lx\n", (unsigned long)ka, sp, frame_size); + /* Align alternate stack and reserve 64 bytes for the signal + handler's frame marker. */ if ((ka->sa.sa_flags & SA_ONSTACK) != 0 && ! sas_ss_flags(sp)) - sp = current->sas_ss_sp; /* Stacks grow up! */ + sp = (current->sas_ss_sp + 0x7f) & ~0x3f; /* Stacks grow up! */ DBG(1,"get_sigframe: Returning sp = %#lx\n", (unsigned long)sp); return (void __user *) sp; /* Stacks grow up. Fun. */ What about something like this (entirely untested, but you'll get the idea): sp = round_down(current->sas_ss_sp + 64, 64); Greetings. Eike
Attachment:
signature.asc
Description: This is a digitally signed message part.