|
@@ -77,11 +77,10 @@ int copy_to_user(void __user *dst, const void *src, unsigned size)
|
|
|
}
|
|
|
|
|
|
static __always_inline __must_check
|
|
|
-int __copy_from_user(void *dst, const void __user *src, unsigned size)
|
|
|
+int __copy_from_user_nocheck(void *dst, const void __user *src, unsigned size)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
|
|
|
- might_fault();
|
|
|
if (!__builtin_constant_p(size))
|
|
|
return copy_user_generic(dst, (__force void *)src, size);
|
|
|
switch (size) {
|
|
@@ -121,11 +120,17 @@ int __copy_from_user(void *dst, const void __user *src, unsigned size)
|
|
|
}
|
|
|
|
|
|
static __always_inline __must_check
|
|
|
-int __copy_to_user(void __user *dst, const void *src, unsigned size)
|
|
|
+int __copy_from_user(void *dst, const void __user *src, unsigned size)
|
|
|
+{
|
|
|
+ might_fault();
|
|
|
+ return __copy_from_user_nocheck(dst, src, size);
|
|
|
+}
|
|
|
+
|
|
|
+static __always_inline __must_check
|
|
|
+int __copy_to_user_nocheck(void __user *dst, const void *src, unsigned size)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
|
|
|
- might_fault();
|
|
|
if (!__builtin_constant_p(size))
|
|
|
return copy_user_generic((__force void *)dst, src, size);
|
|
|
switch (size) {
|
|
@@ -164,6 +169,13 @@ int __copy_to_user(void __user *dst, const void *src, unsigned size)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static __always_inline __must_check
|
|
|
+int __copy_to_user(void __user *dst, const void *src, unsigned size)
|
|
|
+{
|
|
|
+ might_fault();
|
|
|
+ return __copy_to_user_nocheck(dst, src, size);
|
|
|
+}
|
|
|
+
|
|
|
static __always_inline __must_check
|
|
|
int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
|
|
|
{
|
|
@@ -220,13 +232,13 @@ int __copy_in_user(void __user *dst, const void __user *src, unsigned size)
|
|
|
static __must_check __always_inline int
|
|
|
__copy_from_user_inatomic(void *dst, const void __user *src, unsigned size)
|
|
|
{
|
|
|
- return copy_user_generic(dst, (__force const void *)src, size);
|
|
|
+ return __copy_from_user_nocheck(dst, (__force const void *)src, size);
|
|
|
}
|
|
|
|
|
|
static __must_check __always_inline int
|
|
|
__copy_to_user_inatomic(void __user *dst, const void *src, unsigned size)
|
|
|
{
|
|
|
- return copy_user_generic((__force void *)dst, src, size);
|
|
|
+ return __copy_to_user_nocheck((__force void *)dst, src, size);
|
|
|
}
|
|
|
|
|
|
extern long __copy_user_nocache(void *dst, const void __user *src,
|