Thread (148 messages) 148 messages, 17 authors, 2022-06-09

Re: [PATCH 00/35] Shadow stacks for userspace

From: Mike Rapoport <rppt@kernel.org>
Date: 2022-02-11 08:05:04
Also in: linux-arch, linux-doc, linux-mm, lkml

On Thu, Feb 10, 2022 at 11:41:16PM -0800, avagin@gmail.com wrote:
On Wed, Feb 09, 2022 at 06:37:53PM -0800, Andy Lutomirski wrote:
quoted
An alternative would be to add a bona fide ptrace call-a-function mechanism.
I can think of two potentially usable variants:

1. Straight call.  PTRACE_CALL_FUNCTION(addr) just emulates CALL addr,
shadow stack push and all.

2. Signal-style.  PTRACE_CALL_FUNCTION_SIGFRAME injects an actual signal
frame just like a real signal is being delivered with the specified handler.
There could be a variant to opt-in to also using a specified altstack and
altshadowstack.
I think this would be ideal. In CRIU, the parasite code is executed in
the "daemon" mode and returns back via sigreturn.  Right now, CRIU needs
to generate a signal frame. If I understand your idea right, the signal
frame will be generated by the kernel.
quoted
2 would be more expensive but would avoid the need for much in the way of
asm magic.  The injected code could be plain C (or Rust or Zig or whatever).

All of this only really handles save, not restore.  I don't understand
restore enough to fully understand the issue.
In a few words, it works like this: CRIU restores all required resources
and prepares a signal frame with a target process state, then it
switches to a small PIE blob, where it restores vma-s and calls
rt_sigreturn.
I think it's also important to note that the stack is restored as a part of
the process memory, i.e. its contents is read from the images.
 
quoted
--Andy
-- 
Sincerely yours,
Mike.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help