diff options
Diffstat (limited to 'include/asm-x86/uaccess_64.h')
-rw-r--r-- | include/asm-x86/uaccess_64.h | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/include/asm-x86/uaccess_64.h b/include/asm-x86/uaccess_64.h index 515d4dce96b5..40a7205fe576 100644 --- a/include/asm-x86/uaccess_64.h +++ b/include/asm-x86/uaccess_64.h | |||
@@ -28,6 +28,10 @@ static __always_inline __must_check | |||
28 | int __copy_from_user(void *dst, const void __user *src, unsigned size) | 28 | int __copy_from_user(void *dst, const void __user *src, unsigned size) |
29 | { | 29 | { |
30 | int ret = 0; | 30 | int ret = 0; |
31 | |||
32 | might_sleep(); | ||
33 | if (current->mm) | ||
34 | might_lock_read(¤t->mm->mmap_sem); | ||
31 | if (!__builtin_constant_p(size)) | 35 | if (!__builtin_constant_p(size)) |
32 | return copy_user_generic(dst, (__force void *)src, size); | 36 | return copy_user_generic(dst, (__force void *)src, size); |
33 | switch (size) { | 37 | switch (size) { |
@@ -70,6 +74,10 @@ static __always_inline __must_check | |||
70 | int __copy_to_user(void __user *dst, const void *src, unsigned size) | 74 | int __copy_to_user(void __user *dst, const void *src, unsigned size) |
71 | { | 75 | { |
72 | int ret = 0; | 76 | int ret = 0; |
77 | |||
78 | might_sleep(); | ||
79 | if (current->mm) | ||
80 | might_lock_read(¤t->mm->mmap_sem); | ||
73 | if (!__builtin_constant_p(size)) | 81 | if (!__builtin_constant_p(size)) |
74 | return copy_user_generic((__force void *)dst, src, size); | 82 | return copy_user_generic((__force void *)dst, src, size); |
75 | switch (size) { | 83 | switch (size) { |
@@ -112,6 +120,10 @@ static __always_inline __must_check | |||
112 | int __copy_in_user(void __user *dst, const void __user *src, unsigned size) | 120 | int __copy_in_user(void __user *dst, const void __user *src, unsigned size) |
113 | { | 121 | { |
114 | int ret = 0; | 122 | int ret = 0; |
123 | |||
124 | might_sleep(); | ||
125 | if (current->mm) | ||
126 | might_lock_read(¤t->mm->mmap_sem); | ||
115 | if (!__builtin_constant_p(size)) | 127 | if (!__builtin_constant_p(size)) |
116 | return copy_user_generic((__force void *)dst, | 128 | return copy_user_generic((__force void *)dst, |
117 | (__force void *)src, size); | 129 | (__force void *)src, size); |