On Fri, Aug 11, 2017 at 08:26:30PM +1000, Michael Ellerman wrote: > Thiago Jung Bauermann <bauer...@linux.vnet.ibm.com> writes: > > > Ram Pai <linux...@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