fork(): disable CLONE_PARENT for init
When global or container-init processes use CLONE_PARENT, they create a multi-rooted process tree. Besides siblings of global init remain as zombies on exit since they are not reaped by their parent (swapper). So prevent global and container-inits from creating siblings. Signed-off-by: Sukadev Bhattiprolu <sukadev@us.ibm.com> Acked-by: Eric W. Biederman <ebiederm@xmission.com> Acked-by: Roland McGrath <roland@redhat.com> Cc: Oren Laadan <orenl@cs.columbia.edu> Cc: Oleg Nesterov <oleg@redhat.com> Cc: Serge Hallyn <serue@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
							
								
									8d65af789f
								
							
						
					
					
						commit
						123be07b0b
					
				| @ -979,6 +979,16 @@ static struct task_struct *copy_process(unsigned long clone_flags, | ||||
| 	if ((clone_flags & CLONE_SIGHAND) && !(clone_flags & CLONE_VM)) | ||||
| 		return ERR_PTR(-EINVAL); | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * Siblings of global init remain as zombies on exit since they are | ||||
| 	 * not reaped by their parent (swapper). To solve this and to avoid | ||||
| 	 * multi-rooted process trees, prevent global and container-inits | ||||
| 	 * from creating siblings. | ||||
| 	 */ | ||||
| 	if ((clone_flags & CLONE_PARENT) && | ||||
| 				current->signal->flags & SIGNAL_UNKILLABLE) | ||||
| 		return ERR_PTR(-EINVAL); | ||||
| 
 | ||||
| 	retval = security_task_create(clone_flags); | ||||
| 	if (retval) | ||||
| 		goto fork_out; | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user