Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

+7 -35
+2
arch/nios2/Kconfig
··· 6 6 select GENERIC_CPU_DEVICES 7 7 select GENERIC_IRQ_PROBE 8 8 select GENERIC_IRQ_SHOW 9 + select GENERIC_STRNCPY_FROM_USER 10 + select GENERIC_STRNLEN_USER 9 11 select HAVE_ARCH_TRACEHOOK 10 12 select HAVE_ARCH_KGDB 11 13 select IRQ_DOMAIN
+5 -2
arch/nios2/include/asm/uaccess.h
··· 42 42 43 43 # define __EX_TABLE_SECTION ".section __ex_table,\"a\"\n" 44 44 45 + #define user_addr_max() (uaccess_kernel() ? ~0UL : TASK_SIZE) 46 + 45 47 /* 46 48 * Zero Userspace 47 49 */ ··· 83 81 #define INLINE_COPY_TO_USER 84 82 85 83 extern long strncpy_from_user(char *__to, const char __user *__from, 86 - long __len); 87 - extern long strnlen_user(const char __user *s, long n); 84 + long __len); 85 + extern __must_check long strlen_user(const char __user *str); 86 + extern __must_check long strnlen_user(const char __user *s, long n); 88 87 89 88 /* Optimized macros */ 90 89 #define __get_user_asm(val, insn, addr, err) \
-33
arch/nios2/mm/uaccess.c
··· 128 128 ".word 12b,13b\n" 129 129 ".previous\n"); 130 130 EXPORT_SYMBOL(raw_copy_to_user); 131 - 132 - long strncpy_from_user(char *__to, const char __user *__from, long __len) 133 - { 134 - int l = strnlen_user(__from, __len); 135 - int is_zt = 1; 136 - 137 - if (l > __len) { 138 - is_zt = 0; 139 - l = __len; 140 - } 141 - 142 - if (l == 0 || copy_from_user(__to, __from, l)) 143 - return -EFAULT; 144 - 145 - if (is_zt) 146 - l--; 147 - return l; 148 - } 149 - 150 - long strnlen_user(const char __user *s, long n) 151 - { 152 - long i; 153 - 154 - for (i = 0; i < n; i++) { 155 - char c; 156 - 157 - if (get_user(c, s + i) == -EFAULT) 158 - return 0; 159 - if (c == 0) 160 - return i + 1; 161 - } 162 - return n + 1; 163 - }