X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fx86_64%2Flib%2Fusercopy.c;h=db8abba1ad819901a1a327465cb1d2fe7061cd5f;hb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;hp=c83825e5c956a187e5b4829126ca5eb4a197df35;hpb=9213980e6a70d8473e0ffd4b39ab5b6caaba9ff5;p=linux-2.6.git diff --git a/arch/x86_64/lib/usercopy.c b/arch/x86_64/lib/usercopy.c index c83825e5c..db8abba1a 100644 --- a/arch/x86_64/lib/usercopy.c +++ b/arch/x86_64/lib/usercopy.c @@ -14,6 +14,7 @@ #define __do_strncpy_from_user(dst,src,count,res) \ do { \ long __d0, __d1, __d2; \ + might_sleep(); \ __asm__ __volatile__( \ " testq %1,%1\n" \ " jz 2f\n" \ @@ -63,6 +64,7 @@ strncpy_from_user(char *dst, const char __user *src, long count) unsigned long __clear_user(void __user *addr, unsigned long size) { long __d0; + might_sleep(); /* no memory constraint because it doesn't change any memory gcc knows about */ asm volatile( @@ -145,7 +147,7 @@ long strlen_user(const char __user *s) unsigned long copy_in_user(void __user *to, const void __user *from, unsigned len) { if (access_ok(VERIFY_WRITE, to, len) && access_ok(VERIFY_READ, from, len)) { - return copy_user_generic((void *)to, (void *)from, len); + return copy_user_generic((__force void *)to, (__force void *)from, len); } return len; }