|
@@ -100,6 +100,7 @@ static inline void set_fs(mm_segment_t fs)
|
|
})
|
|
})
|
|
|
|
|
|
#define access_ok(type, addr, size) __range_ok(addr, size)
|
|
#define access_ok(type, addr, size) __range_ok(addr, size)
|
|
|
|
+#define user_addr_max get_fs
|
|
|
|
|
|
/*
|
|
/*
|
|
* The "__xxx" versions of the user access functions do not verify the address
|
|
* The "__xxx" versions of the user access functions do not verify the address
|
|
@@ -240,9 +241,6 @@ extern unsigned long __must_check __copy_to_user(void __user *to, const void *fr
|
|
extern unsigned long __must_check __copy_in_user(void __user *to, const void __user *from, unsigned long n);
|
|
extern unsigned long __must_check __copy_in_user(void __user *to, const void __user *from, unsigned long n);
|
|
extern unsigned long __must_check __clear_user(void __user *addr, unsigned long n);
|
|
extern unsigned long __must_check __clear_user(void __user *addr, unsigned long n);
|
|
|
|
|
|
-extern unsigned long __must_check __strncpy_from_user(char *to, const char __user *from, unsigned long count);
|
|
|
|
-extern unsigned long __must_check __strnlen_user(const char __user *s, long n);
|
|
|
|
-
|
|
|
|
static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n)
|
|
static inline unsigned long __must_check copy_from_user(void *to, const void __user *from, unsigned long n)
|
|
{
|
|
{
|
|
if (access_ok(VERIFY_READ, from, n))
|
|
if (access_ok(VERIFY_READ, from, n))
|
|
@@ -276,24 +274,9 @@ static inline unsigned long __must_check clear_user(void __user *to, unsigned lo
|
|
return n;
|
|
return n;
|
|
}
|
|
}
|
|
|
|
|
|
-static inline long __must_check strncpy_from_user(char *dst, const char __user *src, long count)
|
|
|
|
-{
|
|
|
|
- long res = -EFAULT;
|
|
|
|
- if (access_ok(VERIFY_READ, src, 1))
|
|
|
|
- res = __strncpy_from_user(dst, src, count);
|
|
|
|
- return res;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-#define strlen_user(s) strnlen_user(s, ~0UL >> 1)
|
|
|
|
|
|
+extern long strncpy_from_user(char *dest, const char __user *src, long count);
|
|
|
|
|
|
-static inline long __must_check strnlen_user(const char __user *s, long n)
|
|
|
|
-{
|
|
|
|
- unsigned long res = 0;
|
|
|
|
-
|
|
|
|
- if (__addr_ok(s))
|
|
|
|
- res = __strnlen_user(s, n);
|
|
|
|
-
|
|
|
|
- return res;
|
|
|
|
-}
|
|
|
|
|
|
+extern __must_check long strlen_user(const char __user *str);
|
|
|
|
+extern __must_check long strnlen_user(const char __user *str, long n);
|
|
|
|
|
|
#endif /* __ASM_UACCESS_H */
|
|
#endif /* __ASM_UACCESS_H */
|