Confused about usercopy_64.c

Andreas Schwab schwab at suse.de
Tue Mar 11 03:53:31 EST 2008


Timur Tabi <timur at freescale.com> writes:

> I'm confused about something in usercopy_64.c:
>
> unsigned long copy_from_user(void *to, const void __user *from, unsigned long n)
> {
> 	if (likely(access_ok(VERIFY_READ, from, n)))
> 		n = __copy_from_user(to, from, n);
> 	else
> 		memset(to, 0, n);
> 	return n;
> }
>
> If access_ok() returns false, then that means that we cannot copy the data from
> user-space.  So why are we returning 'n'?

To tell the caller that the function failed.  The result is the number
of bytes _left_ to be copying, ie. zero means success.

Andreas.

-- 
Andreas Schwab, SuSE Labs, schwab at suse.de
SuSE Linux Products GmbH, Maxfeldstraße 5, 90409 Nürnberg, Germany
PGP key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."



More information about the Linuxppc-dev mailing list