diff options
Diffstat (limited to 'arch/sh/include/asm/uaccess.h')
| -rw-r--r-- | arch/sh/include/asm/uaccess.h | 75 | 
1 files changed, 7 insertions, 68 deletions
diff --git a/arch/sh/include/asm/uaccess.h b/arch/sh/include/asm/uaccess.h index 050f221fa89..8698a80ed00 100644 --- a/arch/sh/include/asm/uaccess.h +++ b/arch/sh/include/asm/uaccess.h @@ -25,6 +25,8 @@  	(__chk_user_ptr(addr),		\  	 __access_ok((unsigned long __force)(addr), (size))) +#define user_addr_max()	(current_thread_info()->addr_limit.seg) +  /*   * Uh, these should become the main single-value transfer routines ...   * They automatically use the right size if we just have the right @@ -100,6 +102,11 @@ struct __large_struct { unsigned long buf[100]; };  # include "uaccess_64.h"  #endif +extern long strncpy_from_user(char *dest, const char __user *src, long count); + +extern __must_check long strlen_user(const char __user *str); +extern __must_check long strnlen_user(const char __user *str, long n); +  /* Generic arbitrary sized copy.  */  /* Return the number of bytes NOT copied */  __kernel_size_t __copy_user(void *to, const void *from, __kernel_size_t n); @@ -137,37 +144,6 @@ __kernel_size_t __clear_user(void *addr, __kernel_size_t size);  	__cl_size;							\  }) -/** - * strncpy_from_user: - Copy a NUL terminated string from userspace. - * @dst:   Destination address, in kernel space.  This buffer must be at - *         least @count bytes long. - * @src:   Source address, in user space. - * @count: Maximum number of bytes to copy, including the trailing NUL. - * - * Copies a NUL-terminated string from userspace to kernel space. - * - * On success, returns the length of the string (not including the trailing - * NUL). - * - * If access to userspace fails, returns -EFAULT (some data may have been - * copied). - * - * If @count is smaller than the length of the string, copies @count bytes - * and returns @count. - */ -#define strncpy_from_user(dest,src,count)				\ -({									\ -	unsigned long __sfu_src = (unsigned long)(src);			\ -	int __sfu_count = (int)(count);					\ -	long __sfu_res = -EFAULT;					\ -									\ -	if (__access_ok(__sfu_src, __sfu_count))			\ -		__sfu_res = __strncpy_from_user((unsigned long)(dest),	\ -				__sfu_src, __sfu_count);		\ -									\ -	__sfu_res;							\ -}) -  static inline unsigned long  copy_from_user(void *to, const void __user *from, unsigned long n)  { @@ -192,43 +168,6 @@ copy_to_user(void __user *to, const void *from, unsigned long n)  	return __copy_size;  } -/** - * strnlen_user: - Get the size of a string in user space. - * @s: The string to measure. - * @n: The maximum valid length - * - * Context: User context only.  This function may sleep. - * - * Get the size of a NUL-terminated string in user space. - * - * Returns the size of the string INCLUDING the terminating NUL. - * On exception, returns 0. - * If the string is too long, returns a value greater than @n. - */ -static inline long strnlen_user(const char __user *s, long n) -{ -	if (!__addr_ok(s)) -		return 0; -	else -		return __strnlen_user(s, n); -} - -/** - * strlen_user: - Get the size of a string in user space. - * @str: The string to measure. - * - * Context: User context only.  This function may sleep. - * - * Get the size of a NUL-terminated string in user space. - * - * Returns the size of the string INCLUDING the terminating NUL. - * On exception, returns 0. - * - * If there is a limit on the length of a valid string, you may wish to - * consider using strnlen_user() instead. - */ -#define strlen_user(str)	strnlen_user(str, ~0UL >> 1) -  /*   * The exception table consists of pairs of addresses: the first is the   * address of an instruction that is allowed to fault, and the second is  |