Why just use separate stacks for code and data if you can engineer a more complicated solution with higher overhead?
ARM Pointer Authentication [2017]
11–16 of 16 posts
Re: ARM Pointer Authentication [2017]
#12Re: ARM Pointer Authentication [2017]
#13Why just use separate stacks for code and data if you can engineer a more complicated solution with higher overhead?
CPU architectures that have register windows [2] tend to spill shifted-out registers onto a separate stack lazily, and those registers could contain the return pointer.
[1] https://clang.llvm.org/docs/SafeStack.html>
[2] https://en.wikipedia.org/wiki/Register_window>
Re: ARM Pointer Authentication [2017]
#14Why just use separate stacks for code and data if you can engineer a more complicated solution with higher overhead?
The "SafeStack" [1] scheme is probably the most well-known that does that. The "safe" stack is the normal stack, and the "unsafe" stack contains all automatic variables that could get dereferenced - including arrays that could overflow. The security of the scheme depends on keeping the location of the safe stack secret, which for one thing means that all code in the program needs to use the SafeStack ABI. It is used…
Re: ARM Pointer Authentication [2017]
#15Why just use separate stacks for code and data if you can engineer a more complicated solution with higher overhead?
The "SafeStack" [1] scheme is probably the most well-known that does that. The "safe" stack is the normal stack, and the "unsafe" stack contains all automatic variables that could get dereferenced - including arrays that could overflow. The security of the scheme depends on keeping the location of the safe stack secret, which for one thing means that all code in the program needs to use the SafeStack ABI. It is used…
Re: ARM Pointer Authentication [2017]
#16Earlier quoted context omitted.
The "SafeStack" [1] scheme is probably the most well-known that does that. The "safe" stack is the normal stack, and the "unsafe" stack contains all automatic variables that could get dereferenced - including arrays that could overflow. The security of the scheme depends on keeping the location of the safe stack secret, which for one thing means that all code in the program needs to use the SafeStack ABI. It is used…
How do register windows differ from register renaming? https://en.m.wikipedia.org/wiki/Register_renaming
Nothing precludes an architecture from having both: register windows to avoid register clobbering and register renaming to allow dozens/hundreds of micro-ops “in flight” at the same time.