Subject: Re: siginfo & no-exec permission - please test
To: Matthias Drochner <M.Drochner@fz-juelich.de>
From: Juergen Hannken-Illjes <hannken@eis.cs.tu-bs.de>
List: port-powerpc
Date: 02/21/2004 17:00:37
On Sat, Feb 21, 2004 at 07:16:25AM -0800, Chuck Silvers wrote:
> hi,
> 
> I tried this patch on a macppc with a modified version of openbsd's
> noexec test (I put a copy of this in
> ftp://ftp.netbsd.org/pub/NetBSD/misc/chs/noexec.c).
> 
> ktrace says it has the right effect:
> 
>    407 noexec   PSIG  SIGSEGV caught handler=0x180075c mask=(): code=SEGV_ACCERR, addr=0xffffe108, trap=1024)
> 
> I'll leave the ibm4xx stuff to someone else, but it looks fine to me.

Same result on explora451 with this line:

Index: trap.c
===================================================================
RCS file: /cvsroot/src/sys/arch/powerpc/ibm4xx/trap.c,v
retrieving revision 1.20
diff -u -2 -r1.20 trap.c
--- trap.c	31 Oct 2003 16:44:35 -0000	1.20
+++ trap.c	21 Feb 2004 15:59:04 -0000
@@ -294,4 +294,5 @@
 		ksi.ksi_trap = EXC_ISI;
 		ksi.ksi_addr = (void *)frame->srr0;
+		ksi.ksi_code = (rv == EACCES ? SEGV_ACCERR : SEGV_MAPERR);
 		trapsignal(l, &ksi);
 		l->l_flag &= ~L_SA_PAGEFAULT;

> -Chuck
> 
> 
> On Thu, Feb 19, 2004 at 07:19:42PM +0100, Matthias Drochner wrote:
> > 
> > Hi -
> > I don't have a ppc box to test with atm, but I've done
> > related fixes to other architectures, and from code
> > inspection it appears to me that a little fix should be
> > applied to the powerpc port as well:
> > Desired behaviour is that a SIGSEGV is delivered to a
> > process, with a siginfo si_code of SEGV_ACCERR if code
> > execution is attempted from virtual memory mapped without
> > execution permission (especially the stack).
> > The appended patched should implement this.
> > 
> > Unfortunately I don't have a test program ready to verify
> > this -- the regression test in regress/sys/uvm/stack_noexec
> > probably doesn't work because gcc's ppc target doesn't
> > use stack trampolines afaics.
> > Perhaps you've got another idea;-)
> > 
> > While we are here, 2 observations:
> > -powerpc/ibm4xx/trap.c appears to leave ksi.ksi_code
> >  uninitialized at a number of places
> > -it also calls trapsignal() directly, without the
> >  emulation hook
> > 
> > best regards
> > Matthias

-- 
Juergen Hannken-Illjes - hannken@eis.cs.tu-bs.de - TU Braunschweig (Germany)