On Fri, May 03, 2024 at 07:38:18PM +0000, Edgecombe, Rick P wrote:
+Some more shadow stack folks from other archs. We are discussing how uretprobes
work with shadow stack.
Context:
https://lore.kernel.org/lkml/ZjU4ganRF1Cbiug6@krava/
Thanks Rick.
Yeah I didn't give enough attention to uprobes either.
Although now that I think for RISC-V shadow stack, it shouldn't be an issue.
On RISC-V return addresses don't get pushed as part of call instruction.
There is a distinct instruction "shadow stack push of return address" in prolog.
Similarly in epilog there is distinct instruction "shadow stack pop and check with
link register".
On RISC-V, uretprobe would install a uprobe on function start and when it's hit.
It'll replace pt_regs->ra = trampoline_handler. As function will resume, trampoline
addr will get pushed and popped. Although trampoline_handler would have to be enlightened
to eventually return to original return site.
On Fri, 2024-05-03 at 21:18 +0200, Jiri Olsa wrote:
hack below seems to fix it for the current uprobe setup,
we need similar fix for the uretprobe syscall trampoline setup
It seems like a reasonable direction.
Security-wise, applications cannot do this on themselves, or it is an otherwise
privileged thing right?