• 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
rpc-pie-priv.h 1011 Bytes