[CRIU] [PATCH 09/10] restore: Add restoration of alternative signal stack, v2
Cyrill Gorcunov
gorcunov at gmail.com
Tue Jul 9 13:04:46 EDT 2013
On Tue, Jul 09, 2013 at 08:52:11PM +0400, Pavel Emelyanov wrote:
> >
> > setup_sas does check that ->sas is not null, thus in protobuf
> > format it's either valid pointer to sas data or NULL otherwise.
>
> OK. Let's assume we ptraced a task with SAS and injected a parasite
> into it. Later for any reason the sigreturn rescue code started to
> return from parasite. Would we restore it with proper SAS?
Yes, as far as I know. The sas saving code is generic, iow
+static void copy_sas(ThreadSasEntry *dst, stack_t *src)
+{
+ dst->ss_sp = encode_pointer(src->ss_sp);
+ dst->ss_size = (u64)src->ss_size;
+ dst->ss_flags = src->ss_flags;
+}
+
+static int parasite_init(struct parasite_ctl *ctl, pid_t pid, struct pstree_item *item)
{
static int ssock = -1;
@@ -421,6 +428,9 @@ static int parasite_init(struct parasite_ctl *ctl, pid_t pid, int nr_threads)
ctl->sig_blocked = args->sig_blocked;
ctl->use_sig_blocked = true;
+ BUG_ON(!item->core[0]->thread_core->sas);
+ copy_sas(item->core[0]->thread_core->sas, &args->sas);
+
on init we save dumpee sas in memory, thus if something go wrong we restore
it via sigreturn by parasite code.
More information about the CRIU
mailing list