The 03/01/2023 18:32, Edgecombe, Rick P wrote: > On Wed, 2023-03-01 at 10:07 -0800, Rick Edgecombe wrote: > > > If one wants to scan the shadow stack how to detect the end (e.g. > > > fast > > > backtrace)? Is it useful to put an invalid value (-1) there? > > > (affects map_shadow_stack syscall too). > > > > Interesting idea. I think it's probably not a breaking ABI change if > > we > > wanted to add it later. > > One complication could be how to handle shadow stacks created outside > of thread creation. map_shadow_stack would typically add a token at the > end so it could be pivoted to. So then the backtracing algorithm would > have to know to skip it or something to find a special start of stack > marker. i'd expect the pivot token to disappear once you pivot to it (and a pivot token to appear on the stack you pivoted away from, so you can go back later) otherwise i don't see how swapcontext works. i'd push an end token and a pivot token on new shadow stacks. > Alternatively, the thread shadow stacks could get an already used token > pushed at the end, to try to match what an in-use map_shadow_stack > shadow stack would look like. Then the backtracing algorithm could just > look for the same token in both cases. It might get confused in exotic > cases and mistake a token in the middle of the stack for the end of the > allocation though. Hmm... a backtracer would search for an end token on an active shadow stack. it should be able to skip other tokens that don't seem to be code addresses. the end token needs to be identifiable and not break security properties. i think it's enough if the backtrace is best effort correct, there can be corner-cases when shadow stack is difficult to interpret, but e.g. a profiler can still make good use of this feature.