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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
config METAG
	def_bool y
	select ARCH_HAS_RAW_COPY_USER
	select EMBEDDED
	select GENERIC_ATOMIC64
	select GENERIC_CLOCKEVENTS
+2 −29
Original line number Diff line number Diff line
@@ -174,36 +174,9 @@ 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,
					unsigned long n);

static inline unsigned long
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,
extern unsigned long raw_copy_to_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
 */
+3 −3
Original line number Diff line number Diff line
@@ -548,7 +548,7 @@
		"SUB	%1,	%1,	D0Ar2\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)
{
	register char __user *dst asm ("A0.2") = pdst;
@@ -654,7 +654,7 @@ unsigned long __copy_user(void __user *pdst, const void *psrc,
	 */
	return retn;
}
EXPORT_SYMBOL(__copy_user);
EXPORT_SYMBOL(raw_copy_to_user);

#define __asm_copy_from_user_1(to, from, ret) \
	__asm_copy_user_cont(to, from, ret,	\