[CRIU] [PATCH] compel: compel_emergency_sigframe() helper introduced

Dmitry Safonov 0x7f454c46 at gmail.com
Fri Mar 24 03:14:32 PDT 2017


2017-03-24 12:32 GMT+03:00 Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>:
>
>
> 24.03.2017 00:13, Andrei Vagin пишет:
>
>> On Fri, Mar 17, 2017 at 01:17:58PM +0300, Stanislav Kinsburskiy wrote:
>>>
>>> This helper constructs sigframe, which can be used to resume process from
>>> the
>>> point where it was stopped.
>>> Result has to be copied to the process manually and then used with
>>> rt_sigreturn.
>>>
>>> Signed-off-by: Stanislav Kinsburskiy <skinsbursky at virtuozzo.com>
[...]
>>> --- a/compel/src/lib/infect.c
>>> +++ b/compel/src/lib/infect.c
>>> @@ -1162,6 +1162,20 @@ static int make_sigframe_plain(void *from, struct
>>> rt_sigframe *f, struct rt_sigf
>>>         return 0;
>>>   }
>>>   +int compel_emergency_sigframe(struct parasite_ctl *ctl, struct
>>> rt_sigframe *f,
>>> +                             struct rt_sigframe *rtf)
>>> +{
>>> +       pid_t pid = ctl->rpid;
>>> +       struct thread_ctx *thread = &ctl->orig;
>>> +       struct plain_regs_struct regs;
>>> +
>>> +       if (get_task_regs(pid, &thread->regs, save_regs_plain, &regs)) {
>>> +               pr_err("Can't obtain regs for thread %d\n", pid);
>>> +               return -1;
>>> +       }
>>> +       return make_sigframe_plain(&regs, f, rtf, &thread->sigmask);
>>
>> make_sigframe_plain is called from parasite_start_daemon(), why it
>> doesn't work for you. Could you describe your usecase for these changes?
>>
>
> Because I don't have parasite plugin, on which parasite_start_daemon relies.
> But it makes sense to use this new helper in parasite_start_daemon to make
> sure it's tested.

Maybe it worth not providing additional interfaces, but splitting the existing.
If we can make non-parasite version of compel_infect() and reuse its code
in parasite's one, so it'll suit criu's needs and needs of projects
without parasite.
Does it make sense?

Also, this looks incomplete without curing part. How do you use
prepared sigframe
afterward? Calling rt_sigreturn() with the help of compel_syscall() or
somehow alike?
I guess, there should be also a patch to complement API.
And (by @avagin's rules) - adding new API/features means adding tests for it,
looks like it wouldn't take much time to write a test for this.

-- 
             Dmitry



More information about the CRIU mailing list