Commit 31af2f36 authored by Al Viro's avatar Al Viro
Browse files

sparc: switch to RAW_COPY_USER



... and drop zeroing in sparc32.

Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 1333eb78
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -45,6 +45,7 @@ config SPARC
	select HAVE_ARCH_HARDENED_USERCOPY
	select PROVE_LOCKING_SMALL if PROVE_LOCKING
	select ARCH_WANT_RELAX_ORDER
	select ARCH_HAS_RAW_COPY_USER

config SPARC32
	def_bool !64BIT
+4 −25
Original line number Diff line number Diff line
@@ -235,39 +235,18 @@ int __get_user_bad(void);

unsigned long __copy_user(void __user *to, const void __user *from, unsigned long size);

static inline unsigned long copy_to_user(void __user *to, const void *from, unsigned long n)
static inline unsigned long raw_copy_to_user(void __user *to, const void *from, unsigned long n)
{
	if (n && __access_ok((unsigned long) to, n)) {
		check_object_size(from, n, true);
	return __copy_user(to, (__force void __user *) from, n);
	} else
		return n;
}

static inline unsigned long __copy_to_user(void __user *to, const void *from, unsigned long n)
{
	check_object_size(from, n, true);
	return __copy_user(to, (__force void __user *) from, n);
}

static inline unsigned long copy_from_user(void *to, const void __user *from, unsigned long n)
{
	if (n && __access_ok((unsigned long) from, n)) {
		check_object_size(to, n, false);
		return __copy_user((__force void __user *) to, from, n);
	} else {
		memset(to, 0, n);
		return n;
	}
}

static inline unsigned long __copy_from_user(void *to, const void __user *from, unsigned long n)
static inline unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n)
{
	return __copy_user((__force void __user *) to, from, n);
}

#define __copy_to_user_inatomic __copy_to_user
#define __copy_from_user_inatomic __copy_from_user
#define INLINE_COPY_FROM_USER
#define INLINE_COPY_TO_USER

static inline unsigned long __clear_user(void __user *addr, unsigned long size)
{
+5 −28
Original line number Diff line number Diff line
@@ -176,39 +176,19 @@ __asm__ __volatile__( \

int __get_user_bad(void);

unsigned long __must_check ___copy_from_user(void *to,
unsigned long __must_check raw_copy_from_user(void *to,
					     const void __user *from,
					     unsigned long size);
static inline unsigned long __must_check
copy_from_user(void *to, const void __user *from, unsigned long size)
{
	check_object_size(to, size, false);

	return ___copy_from_user(to, from, size);
}
#define __copy_from_user copy_from_user

unsigned long __must_check ___copy_to_user(void __user *to,
unsigned long __must_check raw_copy_to_user(void __user *to,
					   const void *from,
					   unsigned long size);
static inline unsigned long __must_check
copy_to_user(void __user *to, const void *from, unsigned long size)
{
	check_object_size(from, size, true);
#define INLINE_COPY_FROM_USER
#define INLINE_COPY_TO_USER

	return ___copy_to_user(to, from, size);
}
#define __copy_to_user copy_to_user

unsigned long __must_check ___copy_in_user(void __user *to,
unsigned long __must_check raw_copy_in_user(void __user *to,
					   const void __user *from,
					   unsigned long size);
static inline unsigned long __must_check
copy_in_user(void __user *to, void __user *from, unsigned long size)
{
	return ___copy_in_user(to, from, size);
}
#define __copy_in_user copy_in_user

unsigned long __must_check __clear_user(void __user *, unsigned long);

@@ -217,9 +197,6 @@ unsigned long __must_check __clear_user(void __user *, unsigned long);
__must_check long strlen_user(const char __user *str);
__must_check long strnlen_user(const char __user *str, long n);

#define __copy_to_user_inatomic __copy_to_user
#define __copy_from_user_inatomic __copy_from_user

struct pt_regs;
unsigned long compute_effective_address(struct pt_regs *,
					unsigned int insn,
+1 −1
Original line number Diff line number Diff line
@@ -23,7 +23,7 @@
#define PREAMBLE					\
	rd		%asi, %g1;			\
	cmp		%g1, ASI_AIUS;			\
	bne,pn		%icc, ___copy_in_user;		\
	bne,pn		%icc, raw_copy_in_user;		\
	 nop
#endif

+1 −1
Original line number Diff line number Diff line
@@ -27,7 +27,7 @@
#define PREAMBLE					\
	rd		%asi, %g1;			\
	cmp		%g1, ASI_AIUS;			\
	bne,pn		%icc, ___copy_in_user;		\
	bne,pn		%icc, raw_copy_in_user;		\
	 nop
#endif

Loading