• Eric W. Biederman's avatar
    fork: Allow CLONE_PARENT after setns(CLONE_NEWPID) · 1f7f4dde
    Eric W. Biederman authored
    Serge Hallyn <serge.hallyn@ubuntu.com> writes:
    > Hi Oleg,
    >
    > commit 40a0d32d :
    > "fork: unify and tighten up CLONE_NEWUSER/CLONE_NEWPID checks"
    > breaks lxc-attach in 3.12.  That code forks a child which does
    > setns() and then does a clone(CLONE_PARENT).  That way the
    > grandchild can be in the right namespaces (which the child was
    > not) and be a child of the original task, which is the monitor.
    >
    > lxc-attach in 3.11 was working fine with no side effects that I
    > could see.  Is there a real danger in allowing CLONE_PARENT
    > when current->nsproxy->pidns_for_children is not our pidns,
    > or was this done out of an "over-abundance of caution"?  Can we
    > safely revert that new extra check?
    
    The two fundamental things I know we can not allow are:
    - A shared signal queue aka CLONE_THREAD.  Because we compute the pid
      and uid of the signal when we place it in the queue.
    
    - Changing the pid and by extention pid_namespace of an existing
      process.
    
    From a parents perspective there is nothing special about the pid
    namespace, to deny CLONE_PARENT, because the parent simply won't know or
    care.
    
    From the childs perspective all that is special really are shared signal
    queues.
    
    User mode threading with CLONE_PARENT|CLONE_VM|CLONE_SIGHAND and tasks
    in different pid namespaces is almost certainly going to break because
    it is complicated.  But shared signal handlers can look at per thread
    information to know which pid namespace a process is in, so I don't know
    of any reason not to support CLONE_PARENT|CLONE_VM|CLONE_SIGHAND threads
    at the kernel level.  It would be absolutely stupid to implement but
    that is a different thing.
    
    So hmm.
    
    Because it can do no harm, and because it is a regression let's remove
    the CLONE_PARENT check and send it stable.
    
    Cc: stable@vger.kernel.org
    Acked-by: default avatarOleg Nesterov <oleg@redhat.com>
    Acked-by: default avatarAndy Lutomirski <luto@amacapital.net>
    Acked-by: default avatarSerge E. Hallyn <serge.hallyn@ubuntu.com>
    Signed-off-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
    1f7f4dde
fork.c 45.7 KB