Skip to content

Commit

Permalink
nios2: use generic strncpy_from_user() and strnlen_user()
Browse files Browse the repository at this point in the history
This change enables the generic strncpy_from_user() and strnlen_user()

Signed-off-by: Ley Foon Tan <[email protected]>
  • Loading branch information
Ley Foon Tan committed May 8, 2017
1 parent edebea9 commit 7f1e614
Show file tree
Hide file tree
Showing 3 changed files with 7 additions and 35 deletions.
2 changes: 2 additions & 0 deletions arch/nios2/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
7 changes: 5 additions & 2 deletions arch/nios2/include/asm/uaccess.h
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,8 @@

# define __EX_TABLE_SECTION ".section __ex_table,\"a\"\n"

#define user_addr_max() (uaccess_kernel() ? ~0UL : TASK_SIZE)

/*
* Zero Userspace
*/
Expand Down Expand Up @@ -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) \
Expand Down
33 changes: 0 additions & 33 deletions arch/nios2/mm/uaccess.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}

0 comments on commit 7f1e614

Please sign in to comment.