Commit 57358ba9 authored by Max Filippov's avatar Max Filippov

xtensa: use generic strncpy_from_user with KASAN

This enables KASAN check of the destination buffer.
Signed-off-by: default avatarMax Filippov <jcmvbkbc@gmail.com>
parent e0baa014
...@@ -15,6 +15,7 @@ config XTENSA ...@@ -15,6 +15,7 @@ config XTENSA
select GENERIC_IRQ_SHOW select GENERIC_IRQ_SHOW
select GENERIC_PCI_IOMAP select GENERIC_PCI_IOMAP
select GENERIC_SCHED_CLOCK select GENERIC_SCHED_CLOCK
select GENERIC_STRNCPY_FROM_USER if KASAN
select HAVE_ARCH_KASAN if MMU select HAVE_ARCH_KASAN if MMU
select HAVE_CC_STACKPROTECTOR select HAVE_CC_STACKPROTECTOR
select HAVE_DEBUG_KMEMLEAK select HAVE_DEBUG_KMEMLEAK
......
...@@ -44,6 +44,8 @@ ...@@ -44,6 +44,8 @@
#define __access_ok(addr, size) (__kernel_ok || __user_ok((addr), (size))) #define __access_ok(addr, size) (__kernel_ok || __user_ok((addr), (size)))
#define access_ok(type, addr, size) __access_ok((unsigned long)(addr), (size)) #define access_ok(type, addr, size) __access_ok((unsigned long)(addr), (size))
#define user_addr_max() (uaccess_kernel() ? ~0UL : TASK_SIZE)
/* /*
* These are the main single-value transfer routines. They * These are the main single-value transfer routines. They
* automatically use the right size if we just have the right pointer * automatically use the right size if we just have the right pointer
...@@ -277,6 +279,8 @@ clear_user(void *addr, unsigned long size) ...@@ -277,6 +279,8 @@ clear_user(void *addr, unsigned long size)
#define __clear_user __xtensa_clear_user #define __clear_user __xtensa_clear_user
#ifndef CONFIG_GENERIC_STRNCPY_FROM_USER
extern long __strncpy_user(char *, const char *, long); extern long __strncpy_user(char *, const char *, long);
static inline long static inline long
...@@ -286,6 +290,9 @@ strncpy_from_user(char *dst, const char *src, long count) ...@@ -286,6 +290,9 @@ strncpy_from_user(char *dst, const char *src, long count)
return __strncpy_user(dst, src, count); return __strncpy_user(dst, src, count);
return -EFAULT; return -EFAULT;
} }
#else
long strncpy_from_user(char *dst, const char *src, long count);
#endif
/* /*
* Return the size of a string (including the ending 0!) * Return the size of a string (including the ending 0!)
......
...@@ -44,7 +44,9 @@ EXPORT_SYMBOL(memmove); ...@@ -44,7 +44,9 @@ EXPORT_SYMBOL(memmove);
EXPORT_SYMBOL(__memset); EXPORT_SYMBOL(__memset);
EXPORT_SYMBOL(__memcpy); EXPORT_SYMBOL(__memcpy);
EXPORT_SYMBOL(__memmove); EXPORT_SYMBOL(__memmove);
#ifndef CONFIG_GENERIC_STRNCPY_FROM_USER
EXPORT_SYMBOL(__strncpy_user); EXPORT_SYMBOL(__strncpy_user);
#endif
EXPORT_SYMBOL(clear_page); EXPORT_SYMBOL(clear_page);
EXPORT_SYMBOL(copy_page); EXPORT_SYMBOL(copy_page);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment