diff options
| author | Arnd Bergmann <arnd@arndb.de> | 2021-01-23 15:21:22 +0100 |
|---|---|---|
| committer | Arnd Bergmann <arnd@arndb.de> | 2021-02-11 22:31:22 +0100 |
| commit | 04e17803c96bb95527da87c2cfbac2f7cb6d697f (patch) | |
| tree | 7b213112a0132fa3a1e9b4222fbf0c8fcd5bbd6b | |
| parent | 8d30623d1899c9d6d462b8b544a3faa4b4b03ac7 (diff) | |
| download | playground-04e17803c96bb95527da87c2cfbac2f7cb6d697f.tar.gz | |
asm-generic: uaccess: use generic uaccess on m68k, h8300 and riscv
The inline versions of strncpy_from_user() and strnlen_user()
have known bugs, so move the last three architectures that use
them over to use the generic implementation.
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
| -rw-r--r-- | arch/h8300/Kconfig | 2 | ||||
| -rw-r--r-- | arch/m68k/Kconfig | 4 | ||||
| -rw-r--r-- | arch/riscv/Kconfig | 4 | ||||
| -rw-r--r-- | include/asm-generic/uaccess.h | 41 |
4 files changed, 9 insertions, 42 deletions
diff --git a/arch/h8300/Kconfig b/arch/h8300/Kconfig index 3e3e0f16f7e0a..53dfd2d47e0e8 100644 --- a/arch/h8300/Kconfig +++ b/arch/h8300/Kconfig @@ -11,6 +11,8 @@ config H8300 select GENERIC_IRQ_SHOW select FRAME_POINTER select GENERIC_CPU_DEVICES + select GENERIC_STRNCPY_FROM_USER + select GENERIC_STRNLEN_USER select MODULES_USE_ELF_RELA select COMMON_CLK select ARCH_WANT_FRAME_POINTERS diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig index 372e4e69c43ac..8e52415980070 100644 --- a/arch/m68k/Kconfig +++ b/arch/m68k/Kconfig @@ -16,8 +16,8 @@ config M68K select GENERIC_CPU_DEVICES select GENERIC_IOMAP select GENERIC_IRQ_SHOW - select GENERIC_STRNCPY_FROM_USER if MMU - select GENERIC_STRNLEN_USER if MMU + select GENERIC_STRNCPY_FROM_USER + select GENERIC_STRNLEN_USER select HAVE_AOUT if MMU select HAVE_ASM_MODVERSIONS select HAVE_DEBUG_BUGVERBOSE diff --git a/arch/riscv/Kconfig b/arch/riscv/Kconfig index e0a34eb5ed3b3..b2223b029728d 100644 --- a/arch/riscv/Kconfig +++ b/arch/riscv/Kconfig @@ -49,8 +49,8 @@ config RISCV select GENERIC_PTDUMP if MMU select GENERIC_SCHED_CLOCK select GENERIC_SMP_IDLE_THREAD - select GENERIC_STRNCPY_FROM_USER if MMU - select GENERIC_STRNLEN_USER if MMU + select GENERIC_STRNCPY_FROM_USER + select GENERIC_STRNLEN_USER select GENERIC_TIME_VSYSCALL if MMU && 64BIT select HANDLE_DOMAIN_IRQ select HAVE_ARCH_AUDITSYSCALL diff --git a/include/asm-generic/uaccess.h b/include/asm-generic/uaccess.h index c03889cc904cf..4f8ce87d25642 100644 --- a/include/asm-generic/uaccess.h +++ b/include/asm-generic/uaccess.h @@ -244,44 +244,6 @@ static inline int __get_user_fn(size_t size, const void __user *ptr, void *x) extern int __get_user_bad(void) __attribute__((noreturn)); /* - * Copy a null terminated string from userspace. - */ -#ifndef strncpy_from_user -static inline long -strncpy_from_user(char *dst, const char __user *src, long count) -{ - char *tmp; - - if (!access_ok(src, 1)) - return -EFAULT; - - strncpy(dst, (const char __force *)src, count); - for (tmp = dst; *tmp && count > 0; tmp++, count--) - ; - return (tmp - dst); -} -#endif - -#ifndef strnlen_user -/* - * Return the size of a string (including the ending 0) - * - * Return 0 on exception, a value greater than N if too long - * - * Unlike strnlen, strnlen_user includes the nul terminator in - * its returned count. Callers should check for a returned value - * greater than N as an indication the string is too long. - */ -static inline long strnlen_user(const char __user *src, long n) -{ - if (!access_ok(src, 1)) - return 0; - - return strnlen(src, n) + 1; -} -#endif - -/* * Zero Userspace */ #ifndef __clear_user @@ -305,4 +267,7 @@ clear_user(void __user *to, unsigned long n) #include <asm/extable.h> +extern long strncpy_from_user(char *dst, const char __user *src, long count); +extern long strnlen_user(const char __user *src, long n); + #endif /* __ASM_GENERIC_UACCESS_H */ |
