[PATCH] AArch64 pauth: Indicate addresses in backtrace for kernel

Kuan-Ying Lee Kuan-Ying.Lee@mediatek.com
Wed Oct 27 03:27:59 GMT 2021


On Tue, 2021-10-26 at 20:46 +0800, Luis Machado wrote:
> Hi!
> 
> Second time's the charm.
> 
> On 10/25/21 8:47 AM, Kuan-Ying Lee via Gdb-patches wrote:
> > Armv8.3-a Pointer Authentication cause the function return address
> > to
> > be changed. GDB need to use address bit[55] to know which mode is
> > active
> > and mask/unmask the link register in order to get backtrace.
> > 
> > If address is in kernel mode, we mask the address. If address is in
> > user mode,
> > we need to unmask the address.
> > ---
> >   gdb/aarch64-tdep.c | 5 ++++-
> >   1 file changed, 4 insertions(+), 1 deletion(-)
> > 
> > diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
> > index 4b5af4616af..d4bb4305cea 100644
> > --- a/gdb/aarch64-tdep.c
> > +++ b/gdb/aarch64-tdep.c
> > @@ -257,7 +257,10 @@ aarch64_frame_unmask_lr (struct gdbarch_tdep
> > *tdep,
> >       {
> >         int cmask_num = AARCH64_PAUTH_CMASK_REGNUM (tdep-
> > >pauth_reg_base);
> >         CORE_ADDR cmask = frame_unwind_register_unsigned
> > (this_frame, cmask_num);
> > -      addr = addr & ~cmask;
> > +      if (addr & 0x0080000000000000ULL)
> 
> I think we should define this constant in aarch64-tdep.h to make it
> more 
> obvious:
> 
> #define AARCH64_PAC_VA_RANGE_BIT 55
> #define AARCH64_PAC_VA_RANGE_MASK (1ULL << AARCH64_PAC_VA_RANGE_BIT)
> 
> > +        addr = addr | cmask;
> > +      else
> > +        addr = addr & ~cmask;
> 
> For the unmasking of the address, it would be nice to put this into
> a 
> separate function that unmasks an address given a particular mask
> value. 
> Something like this:
> 
> static CORE_ADDR
> aarch64_unmask_address (CORE_ADDR address, CORE_ADDR mask)
> {
>    /* Unmask kernel mode and user mode addresses appropriately based
> on
>       the VA range bit.  */
>    if (address & AARCH64_PAC_VA_RANGE_MASK)
>      address | mask;
>    else
>      address & ~mask;
> 
>    return address;
> }
> 
> If we ever need to unmask kernel/user addresses somewhere else in
> the 
> code, we can just call this function from now on.

Got it.
> 
> Could you please send a v2 of the patch with the suggested changes?

Sure.
Thanks for the suggestions.

> 
> Thanks for the patch.



More information about the Gdb-patches mailing list