X-Git-Url: https://git.openpandora.org/cgi-bin/gitweb.cgi?p=pandora-kernel.git;a=blobdiff_plain;f=include%2Fasm-generic%2Fuaccess.h;h=5ba2c4570bd3f34592c4c50216caeffa4b7c2f88;hp=61dada2775204d81133d0a2dbc502e97f7551e7d;hb=33734b78269e1d211cd1288c49756636042aa31e;hpb=87f3c8956e3fea2a704c3834e0666e8fae5a529e diff --git a/include/asm-generic/uaccess.h b/include/asm-generic/uaccess.h index 61dada277520..5ba2c4570bd3 100644 --- a/include/asm-generic/uaccess.h +++ b/include/asm-generic/uaccess.h @@ -221,13 +221,17 @@ extern int __put_user_bad(void) __attribute__((noreturn)); might_sleep(); \ access_ok(VERIFY_READ, ptr, sizeof(*ptr)) ? \ __get_user(x, ptr) : \ - -EFAULT; \ + ((x) = (__typeof__(*(ptr)))0,-EFAULT); \ }) static inline int __get_user_fn(size_t size, const void __user *ptr, void *x) { - size = __copy_from_user(x, ptr, size); - return size ? -EFAULT : size; + size_t n = __copy_from_user(x, ptr, size); + if (unlikely(n)) { + memset(x + (size - n), 0, n); + return -EFAULT; + } + return 0; } extern int __get_user_bad(void) __attribute__((noreturn));