• Dmitry Safonov's avatar
    compel: kill self-unmap in parasite · d4c02f2e
    Dmitry Safonov authored
    Why should we have self-unmapping code in parasite?
    It looks like, we can drop this code using simple sys_unmap()
    injection (like that I did for `criu exec` action and for cases where we
    failed to insert parasite by some reason, but still need to unmap remotes).
    
    It's an RFC, so just a suggestion - maybe I miss something you have in
    mind - please, describe that/those things.
    
    My motivation is:
    - less code, defined commands for PIE, one BUG() less, one jump to PIE less
    - I'm making one 64-bit parasite on x86 instead of two 32 and 64 bit.
      It works (branch 32-one-parasite) with long-jump in the beginning to
      64-bit code from 32-bit task.
      On parasite curing it sig-returns from 64-bit parasite to 32-bit task,
      this point we're trapping in CRIU. After that we command parasite to
      unmap itself, so it long-jumps again to parasite 64-bit code, unmaps,
      we caught task after sys_unmap and the task is with 64-bit CS.
      We can't set 32-bit registers after this - kernel checks that
      registers set is the same on PTRACE_SETREGSET:
    > > static int ptrace_regset(struct task_struct *task, int req, unsigned int type,
    > >                        struct iovec *kiov)
    ...
    > >       if (!regset || (kiov->iov_len % regset->size) != 0)
    > >               return -EINVAL;
      So, to return again to 32-bit task I need sigreturn() again or add
      long-jump with 32-bit CS.
      I've disable that for 32-bit testing with (in compel_cure_remote):
    -       if (ctl->addr_cmd) {
    +       if (ctl->addr_cmd && user_regs_native(&ctl->orig.regs)) {
      And it works. It also works for native tasks, so why should we keep it?
    
    travis-ci: success for compel: kill self-unmap in parasite
    Cc: Cyrill Gorcunov <gorcunov@openvz.org>
    Cc: Pavel Emelyanov <xemul@virtuozzo.com>
    Cc: Andrei Vagin <avagin@virtuozzo.com>
    Signed-off-by: 's avatarDmitry Safonov <dsafonov@virtuozzo.com>
    Acked-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
    Signed-off-by: 's avatarPavel Emelyanov <xemul@virtuozzo.com>
    Signed-off-by: 's avatarAndrei Vagin <avagin@virtuozzo.com>
    d4c02f2e
Name
Last commit
Last update
..
arch Loading commit data...
include Loading commit data...
plugins Loading commit data...
src Loading commit data...
test Loading commit data...
.gitignore Loading commit data...
Makefile Loading commit data...