diff options
author | Ley Foon Tan <ley.foon.tan@intel.com> | 2017-05-08 17:14:14 +0800 |
---|---|---|
committer | Ley Foon Tan <ley.foon.tan@intel.com> | 2017-05-08 17:14:14 +0800 |
commit | 7f1e614113ffe75f5ea7c99f641bf1b56f85be03 (patch) | |
tree | 18c95adccb9ce60cddd4f1407639678bcc74dbfd /arch | |
parent | edebea98777d7090ea14bdce2e38e6798557729d (diff) | |
download | linux-stable-7f1e614113ffe75f5ea7c99f641bf1b56f85be03.tar.gz linux-stable-7f1e614113ffe75f5ea7c99f641bf1b56f85be03.tar.bz2 linux-stable-7f1e614113ffe75f5ea7c99f641bf1b56f85be03.zip |
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>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/nios2/Kconfig | 2 | ||||
-rw-r--r-- | arch/nios2/include/asm/uaccess.h | 7 | ||||
-rw-r--r-- | arch/nios2/mm/uaccess.c | 33 |
3 files changed, 7 insertions, 35 deletions
diff --git a/arch/nios2/Kconfig b/arch/nios2/Kconfig index 51a56c8b04b4..a72d5f0de692 100644 --- 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 diff --git a/arch/nios2/include/asm/uaccess.h b/arch/nios2/include/asm/uaccess.h index 727bd9504899..dfa3c7cb30b4 100644 --- a/arch/nios2/include/asm/uaccess.h +++ b/arch/nios2/include/asm/uaccess.h @@ -42,6 +42,8 @@ # define __EX_TABLE_SECTION ".section __ex_table,\"a\"\n" +#define user_addr_max() (uaccess_kernel() ? ~0UL : TASK_SIZE) + /* * Zero Userspace */ @@ -81,8 +83,9 @@ raw_copy_to_user(void __user *to, const void *from, unsigned long n); #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) \ diff --git a/arch/nios2/mm/uaccess.c b/arch/nios2/mm/uaccess.c index 804983317766..34f10af8ea40 100644 --- 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; -} |