mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-29 23:24:11 +08:00
fix clone(CLONE_NEWPID)
Currently we are complicating the code in copy_process, the clone ABI, and if we fix the bugs sys_setsid itself, with an unnecessary open coded version of sys_setsid. So just simplify everything and don't special case the session and pgrp of the initial process in a pid namespace. Having this special case actually presents to user space the classic linux startup conditions with session == pgrp == 0 for /sbin/init. We already handle sending signals to processes in a child pid namespace. We need to handle sending signals to processes in a parent pid namespace for cases like SIGCHILD and SIGIO. This makes nothing extra visible inside a pid namespace. So this extra special case appears to have no redeeming merits. Further removing this special case increases the flexibility of how we can use pid namespaces, by not requiring the initial process in a pid namespace to be a daemon. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: Oleg Nesterov <oleg@tv-sign.ru> Cc: Pavel Emelyanov <xemul@openvz.org> Cc: Sukadev Bhattiprolu <sukadev@us.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
e00ba3dae0
commit
5cd17569fd
@ -1292,23 +1292,14 @@ static struct task_struct *copy_process(unsigned long clone_flags,
|
||||
__ptrace_link(p, current->parent);
|
||||
|
||||
if (thread_group_leader(p)) {
|
||||
if (clone_flags & CLONE_NEWPID) {
|
||||
if (clone_flags & CLONE_NEWPID)
|
||||
p->nsproxy->pid_ns->child_reaper = p;
|
||||
p->signal->tty = NULL;
|
||||
set_task_pgrp(p, p->pid);
|
||||
set_task_session(p, p->pid);
|
||||
attach_pid(p, PIDTYPE_PGID, pid);
|
||||
attach_pid(p, PIDTYPE_SID, pid);
|
||||
} else {
|
||||
p->signal->tty = current->signal->tty;
|
||||
set_task_pgrp(p, task_pgrp_nr(current));
|
||||
set_task_session(p, task_session_nr(current));
|
||||
attach_pid(p, PIDTYPE_PGID,
|
||||
task_pgrp(current));
|
||||
attach_pid(p, PIDTYPE_SID,
|
||||
task_session(current));
|
||||
}
|
||||
|
||||
p->signal->tty = current->signal->tty;
|
||||
set_task_pgrp(p, task_pgrp_nr(current));
|
||||
set_task_session(p, task_session_nr(current));
|
||||
attach_pid(p, PIDTYPE_PGID, task_pgrp(current));
|
||||
attach_pid(p, PIDTYPE_SID, task_session(current));
|
||||
list_add_tail_rcu(&p->tasks, &init_task.tasks);
|
||||
__get_cpu_var(process_counts)++;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user