diff options
author | Heiko Carstens <heiko.carstens@de.ibm.com> | 2010-01-05 14:19:11 +0100 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2010-01-05 13:45:06 -0800 |
commit | 409d02ef6d74f5e91f5ea4c587b2ee1375f106fc (patch) | |
tree | b0a306edba73fe23fde15568ff04dbb00e5536cc /arch/x86/include/asm/uaccess_64.h | |
parent | f4b825bde98938f160315d655597bc9731521cae (diff) | |
download | blackbird-op-linux-409d02ef6d74f5e91f5ea4c587b2ee1375f106fc.tar.gz blackbird-op-linux-409d02ef6d74f5e91f5ea4c587b2ee1375f106fc.zip |
x86: copy_from_user() should not return -EFAULT
Callers of copy_from_user() expect it to return the number of bytes
it could not copy. In no case it is supposed to return -EFAULT.
In case of a detected buffer overflow just return the requested
length. In addition one could think of a memset that would clear
the size of the target object.
[ hpa: code is not in .32 so not needed for -stable ]
Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Acked-by: Arjan van de Ven <arjan@linux.intel.com>
LKML-Reference: <20100105131911.GC5480@osiris.boeblingen.de.ibm.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/x86/include/asm/uaccess_64.h')
-rw-r--r-- | arch/x86/include/asm/uaccess_64.h | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/arch/x86/include/asm/uaccess_64.h b/arch/x86/include/asm/uaccess_64.h index 46324c6a4f6e..535e421498f6 100644 --- a/arch/x86/include/asm/uaccess_64.h +++ b/arch/x86/include/asm/uaccess_64.h @@ -30,16 +30,15 @@ static inline unsigned long __must_check copy_from_user(void *to, unsigned long n) { int sz = __compiletime_object_size(to); - int ret = -EFAULT; might_fault(); if (likely(sz == -1 || sz >= n)) - ret = _copy_from_user(to, from, n); + n = _copy_from_user(to, from, n); #ifdef CONFIG_DEBUG_VM else WARN(1, "Buffer overflow detected!\n"); #endif - return ret; + return n; } static __always_inline __must_check |