if (!task->mm) goto bad; if(((current->uid != task->euid) || (current->uid != task->suid) || (current->uid != task->uid) || (current->gid != task->egid) || (current->gid != task->sgid) || (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE)) goto bad; smp_rmb(); if (!task->mm->dumpable && !capable(CAP_SYS_PTRACE)) goto bad; 
int ptrace_attach(struct task_struct *task){	int retval;	task_lock(task);	retval = -EPERM;	if (task->pid <= 1)		goto bad;	if (task == current)		goto bad;	if (!task->mm)		goto bad;	if(((current->uid != task->euid) ||	    (current->uid != task->suid) ||	    (current->uid != task->uid) || 	    (current->gid != task->egid) || 	    (current->gid != task->sgid) || 	    (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE))		goto bad;	smp_rmb();	if (!task->mm->dumpable && !capable(CAP_SYS_PTRACE))		goto bad;	/* the same process cannot be attached many times */	if (task->ptrace & PT_PTRACED)		goto bad;	retval = security_ptrace(current, task);	if (retval)		goto bad;	/* Go */	task->ptrace |= PT_PTRACED | ((task->real_parent != current)				      ? PT_ATTACHED : 0);	if (capable(CAP_SYS_PTRACE))		task->ptrace |= PT_PTRACE_CAP;	task_unlock(task);	write_lock_irq(&tasklist_lock);	__ptrace_link(task, current);	write_unlock_irq(&tasklist_lock);	force_sig_specific(SIGSTOP, task);	return 0;bad:	task_unlock(task);	return retval;}
4520	/local/tlutelli/issta_data/temp/c/2005_temp/2005/4520/ab8d11beb46f0bd0617e04205c01f5c1fe845b61/ptrace.c/clean/kernel/ptrace.c