Commit 840db3f9 authored by James Hogan's avatar James Hogan Committed by Al Viro

metag/usercopy: Switch to RAW_COPY_USER

Switch to using raw user copy instead of providing metag specific
[__]copy_{to,from}_user[_inatomic](). This simplifies the metag
uaccess.h and allows us to take advantage of extra checking in the
generic versions.
Signed-off-by: default avatarJames Hogan <james.hogan@imgtec.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: linux-metag@vger.kernel.org
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent a98bba56
config METAG config METAG
def_bool y def_bool y
select ARCH_HAS_RAW_COPY_USER
select EMBEDDED select EMBEDDED
select GENERIC_ATOMIC64 select GENERIC_ATOMIC64
select GENERIC_CLOCKEVENTS select GENERIC_CLOCKEVENTS
......
...@@ -174,35 +174,8 @@ extern long __must_check strnlen_user(const char __user *src, long count); ...@@ -174,35 +174,8 @@ extern long __must_check strnlen_user(const char __user *src, long count);
extern unsigned long raw_copy_from_user(void *to, const void __user *from, extern unsigned long raw_copy_from_user(void *to, const void __user *from,
unsigned long n); unsigned long n);
extern unsigned long raw_copy_to_user(void __user *to, const void *from,
static inline unsigned long unsigned long n);
copy_from_user(void *to, const void __user *from, unsigned long n)
{
unsigned long res = n;
if (likely(access_ok(VERIFY_READ, from, n)))
res = raw_copy_from_user(to, from, n);
if (unlikely(res))
memset(to + (n - res), 0, res);
return res;
}
#define __copy_from_user(to, from, n) raw_copy_from_user(to, from, n)
#define __copy_from_user_inatomic __copy_from_user
extern unsigned long __must_check __copy_user(void __user *to,
const void *from,
unsigned long n);
static inline unsigned long copy_to_user(void __user *to, const void *from,
unsigned long n)
{
if (access_ok(VERIFY_WRITE, to, n))
return __copy_user(to, from, n);
return n;
}
#define __copy_to_user(to, from, n) __copy_user(to, from, n)
#define __copy_to_user_inatomic __copy_to_user
/* /*
* Zero Userspace * Zero Userspace
......
...@@ -548,8 +548,8 @@ ...@@ -548,8 +548,8 @@
"SUB %1, %1, D0Ar2\n" \ "SUB %1, %1, D0Ar2\n" \
"SUB %3, %3, D1Ar1\n") "SUB %3, %3, D1Ar1\n")
unsigned long __copy_user(void __user *pdst, const void *psrc, unsigned long raw_copy_to_user(void __user *pdst, const void *psrc,
unsigned long n) unsigned long n)
{ {
register char __user *dst asm ("A0.2") = pdst; register char __user *dst asm ("A0.2") = pdst;
register const char *src asm ("A1.2") = psrc; register const char *src asm ("A1.2") = psrc;
...@@ -654,7 +654,7 @@ unsigned long __copy_user(void __user *pdst, const void *psrc, ...@@ -654,7 +654,7 @@ unsigned long __copy_user(void __user *pdst, const void *psrc,
*/ */
return retn; return retn;
} }
EXPORT_SYMBOL(__copy_user); EXPORT_SYMBOL(raw_copy_to_user);
#define __asm_copy_from_user_1(to, from, ret) \ #define __asm_copy_from_user_1(to, from, ret) \
__asm_copy_user_cont(to, from, ret, \ __asm_copy_user_cont(to, from, ret, \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment