| From 1e114cbc9496ee8376e0ad899890a1eff7e58230 Mon Sep 17 00:00:00 2001 |
| From: Ley Foon Tan <ley.foon.tan@intel.com> |
| Date: Mon, 8 May 2017 17:14:14 +0800 |
| Subject: [PATCH 103/103] nios2: use generic strncpy_from_user() and |
| strnlen_user() |
| |
| This change enables the generic strncpy_from_user() and strnlen_user() |
| |
| Signed-off-by: Ley Foon Tan <ley.foon.tan@intel.com> |
| --- |
| arch/nios2/Kconfig | 2 ++ |
| arch/nios2/include/asm/uaccess.h | 7 +++++-- |
| arch/nios2/mm/uaccess.c | 33 --------------------------------- |
| 3 files changed, 7 insertions(+), 35 deletions(-) |
| |
| --- a/arch/nios2/Kconfig |
| +++ b/arch/nios2/Kconfig |
| @@ -6,6 +6,8 @@ config NIOS2 |
| select GENERIC_CPU_DEVICES |
| select GENERIC_IRQ_PROBE |
| select GENERIC_IRQ_SHOW |
| + select GENERIC_STRNCPY_FROM_USER |
| + select GENERIC_STRNLEN_USER |
| select HAVE_ARCH_TRACEHOOK |
| select HAVE_ARCH_KGDB |
| select IRQ_DOMAIN |
| --- a/arch/nios2/include/asm/uaccess.h |
| +++ b/arch/nios2/include/asm/uaccess.h |
| @@ -64,6 +64,8 @@ extern int fixup_exception(struct pt_reg |
| |
| # define __EX_TABLE_SECTION ".section __ex_table,\"a\"\n" |
| |
| +#define user_addr_max() (uaccess_kernel() ? ~0UL : TASK_SIZE) |
| + |
| /* |
| * Zero Userspace |
| */ |
| @@ -103,8 +105,9 @@ raw_copy_to_user(void __user *to, const |
| #define INLINE_COPY_TO_USER |
| |
| extern long strncpy_from_user(char *__to, const char __user *__from, |
| - long __len); |
| -extern long strnlen_user(const char __user *s, long n); |
| + long __len); |
| +extern __must_check long strlen_user(const char __user *str); |
| +extern __must_check long strnlen_user(const char __user *s, long n); |
| |
| /* Optimized macros */ |
| #define __get_user_asm(val, insn, addr, err) \ |
| --- a/arch/nios2/mm/uaccess.c |
| +++ b/arch/nios2/mm/uaccess.c |
| @@ -128,36 +128,3 @@ asm( |
| ".word 12b,13b\n" |
| ".previous\n"); |
| EXPORT_SYMBOL(raw_copy_to_user); |
| - |
| -long strncpy_from_user(char *__to, const char __user *__from, long __len) |
| -{ |
| - int l = strnlen_user(__from, __len); |
| - int is_zt = 1; |
| - |
| - if (l > __len) { |
| - is_zt = 0; |
| - l = __len; |
| - } |
| - |
| - if (l == 0 || copy_from_user(__to, __from, l)) |
| - return -EFAULT; |
| - |
| - if (is_zt) |
| - l--; |
| - return l; |
| -} |
| - |
| -long strnlen_user(const char __user *s, long n) |
| -{ |
| - long i; |
| - |
| - for (i = 0; i < n; i++) { |
| - char c; |
| - |
| - if (get_user(c, s + i) == -EFAULT) |
| - return 0; |
| - if (c == 0) |
| - return i + 1; |
| - } |
| - return n + 1; |
| -} |