[RFC v7 24/25] powerpc: Deliver SEGV signal on pkey violation

Ram Pai linuxram at us.ibm.com
Fri Aug 18 03:14:08 AEST 2017


On Fri, Aug 11, 2017 at 08:26:30PM +1000, Michael Ellerman wrote:
> Thiago Jung Bauermann <bauerman at linux.vnet.ibm.com> writes:
> 
> > Ram Pai <linuxram at us.ibm.com> writes:
> >
> >> The value of the AMR register at the time of exception
> >> is made available in gp_regs[PT_AMR] of the siginfo.
> >>
> >> The value of the pkey, whose protection got violated,
> >> is made available in si_pkey field of the siginfo structure.
> >
> > Should the IAMR also be made available?
> >
> > Also, should the AMR and IAMR be accesible to userspace (e.g., to GDB)
> > via ptrace and the core file?
> 
> Yes if they're part of the thread's context they should be accessible
> via ptrace and in core files.

ok. Some more code needed. :(

> 
> >> --- a/arch/powerpc/kernel/signal_32.c
> >> +++ b/arch/powerpc/kernel/signal_32.c
> >> @@ -500,6 +500,11 @@ static int save_user_regs(struct pt_regs *regs, struct mcontext __user *frame,
> >>  				   (unsigned long) &frame->tramp[2]);
> >>  	}
> >>
> >> +#ifdef CONFIG_PPC64_MEMORY_PROTECTION_KEYS
> >> +	if (__put_user(get_paca()->paca_amr, &frame->mc_gregs[PT_AMR]))
> >> +		return 1;
> >> +#endif /*  CONFIG_PPC64_MEMORY_PROTECTION_KEYS */
> >> +
> >>  	return 0;
> >>  }
> >
> > frame->mc_gregs[PT_AMR] has 32 bits, but paca_amr has 64 bits. Does this
> > work as intended?

hmm..i think we should just disable pkey support for 32 bit apps, till
we figure out all the edge cases.

> 
> I don't understand why we are putting it in there at all?
> 
> Is there some special handling of the actual register on signals? I
> haven't seen it. In which case the process can get the value of AMR by
> reading the register. ??

The value of AMR register at the time of the key-exception may not be
the same when the signal handler is invoked. 

RP



More information about the Linuxppc-dev mailing list