[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