RE: Shadow stack backtrace command name

"Schimpe, Christina via Gdb" <[email protected]>
Newsgroups gmane.comp.gdb.devel
Message-ID <SN7PR11MB76384595C96E6A8C701EAECEF9A42@SN7PR11MB7638.namprd11.prod.outlook.com>
> * Christina Schimpe:
> 
> > We are currently working on the implementation of the shadow stack
> backtrace.
> > This is how we would print a shadow stack backtrace for signals:
> >
> > ~~~
> > (gdb) bt shadow
> > #0  0x00007ffff7c54d90 in __restore_rt from /lib64/libc.so.6
> > #1  0x80007ffff79fffd8
> > #2  0x00007ffff7c54ce6 in __GI_raise at ../sysdeps/posix/raise.c:27
> > #3  0x000000000040115d in main at /tmp/amd64-shadow-stack-signal.c:32
> > [...]
> > ~~~
> 
> > This would be the corresponding ordinary stack:
> > ~~~
> > (gdb) bt
> > #0  handler (signo=10) at /tmp/amd64-shadow-stack-signal.c:25
> > #1  <signal handler called>
> > #2  __pthread_kill_implementation ([...]) at pthread_kill.c:44
> > #3  0x00007ffff7ca15f3 in __pthread_kill_internal (signo=10,
> > threadid=<optimized out>) at pthread_kill.c:78
> > #4  0x00007ffff7c54ce6 in __GI_raise (sig=10) at
> > ../sysdeps/posix/raise.c:26
> > #5  0x000000000040115d in main () at
> > /tmp/amd64-shadow-stack-signal.c:31
> > ~~~
> > Do you see much value in combining the outputs?
> 
> The difference is that the shadow stack backtrace does not contain the
> interrupted instruction, so frame #2 in the traditional backtrace.  This is more
> important for CPU-generated signals such as division by zero or invalid
> memory access, where you really want to see the fault address in the
> backtrace.
> 
> > The elements on the shadow stack are following the description of the
> > linux kernel for signals:
> > "When a signal happens, the old pre-signal state is pushed on the stack.
> >  When shadow stack is enabled, the shadow stack specific state is
> > pushed onto the shadow stack. Today this is only the old SSP (shadow
> > stack pointer),  pushed in a special format with bit 63 set."
> > (https://docs.kernel.org/arch/x86/shstk.html)
> >
> > Frame 1 contains the old SSP with bit 63 set.
> 
> I would like the kernel to push the address of the interrupted instruction as
> well, potentially with additional flag markup.  Or maybe it's so early that we
> don't need it.  The signal return path would have pop it off the stack and not
> validate it because I think it's an expected use case to redirect execution from
> a signal handler by patching the signal context.  Alternatively, the kernel
> could push the address of the signal context, which might be even more
> useful.  I think it would be useful if the shadow stack contained all the data
> needed to implement the glibc backtrace function, not because glibc is
> important, but because it seems to be a good indicator what programmers
> expect from a backtrace.
> 
> We also need to figure out how this interacts with LAM.  Does the CPU push
> tagged addresses onto the shadow stack?  

No, I don't think so. For LAM only tagged data pointers are supported. 

Christina

Intel Deutschland GmbH
Registered Address: Am Campeon 10, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Sean Fennelly, Jeffrey Schneiderman, Tiffany Doon Silva
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.