Re: [rfc][patch] Avoid taking global tasklist_lock for single threaded process at getrusage()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 12/24/05, Christoph Lameter <[email protected]> wrote:
> Please put the copy_to_user() invocation into sys_getrusage. That is the 
> only function that needs to deal with user space issues includding 
> the transfer of the contents of struct rusage. Define 
> a local rusage in sys_getrusage. Pass that address to the other functions
> and only copy on success to user space.

rusage_both is called at various places in exit.c, all of which are in
turn called from sys_wait4 through do_wait. They pass a user space
rusage struct pointer and expect the results to be copied there.
Similarly, rusage_self and rusage_children are called from sysirix.c
which also seemingly passes a user space pointer to them. Hence, the
copy to user in all three functions.

n.

 
> copy_to_user occurs repeatedly:
> 
> On Fri, 23 Dec 2005, Ravikiran G Thirumalai wrote:
> 
> 
> >  	if (unlikely(!p->signal))
> > -		return;
> > +		 return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;
> >  
> > +	cputime_to_timeval(utime, &r.ru_utime);
> > +	cputime_to_timeval(stime, &r.ru_stime);
> > +
> > +	return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;
> > +}
> > +
> > +
> > +	return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;
> >  }
> >  
> > +	if (unlikely(!p->signal))
> > +		 return copy_to_user(ru, &r, sizeof(r)) ? -EFAULT : 0;
> > +
> 
> But its  only needed here:
> 
> >  asmlinkage long sys_getrusage(int who, struct rusage __user *ru)
> >  {
> > -	if (who != RUSAGE_SELF && who != RUSAGE_CHILDREN)
> > -		return -EINVAL;
> > -	return getrusage(current, who, ru);
> > +	switch (who) {
> > +		case RUSAGE_SELF:
> > +			return getrusage_self(ru);
> > +		case RUSAGE_CHILDREN:
> > +			return getrusage_children(ru);
> > +		default:
> > +			break;
> > +	}
> > +	return -EINVAL;
> >  }
> 
> 


-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux