From mboxrd@z Thu Jan 1 00:00:00 1970 From: Rolf Eike Beer Subject: Re: [PATCH] parisc: sigaltstack doesn't round ss.ss_sp as required Date: Sun, 25 Nov 2012 23:07:19 +0100 Message-ID: <1585369.EaOyvHic2M@eto> References: Mime-Version: 1.0 Content-Type: multipart/signed; boundary="nextPart12424661.unelz1emSx"; micalg="pgp-sha1"; protocol="application/pgp-signature" Cc: Helge Deller , Parisc List , "James E.J. Bottomley" To: John David Anglin Return-path: In-Reply-To: List-ID: List-Id: linux-parisc.vger.kernel.org --nextPart12424661.unelz1emSx Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" 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 --nextPart12424661.unelz1emSx Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.18 (GNU/Linux) iEYEABECAAYFAlCylpwACgkQXKSJPmm5/E6HjACeLhXyDLuOb9W7ygUHtzGsF8ob 8ncAn1ZOIVpounOKXa6P0MDD7WSVrMYr =E8P9 -----END PGP SIGNATURE----- --nextPart12424661.unelz1emSx--