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]

 



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.

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