From: Linus Torvalds Date: Mon, 3 May 2021 19:58:31 +0000 (-0700) Subject: Merge tag 'csky-for-linus-5.13-rc1' of git://github.com/c-sky/csky-linux X-Git-Tag: v5.13-rc1~62 X-Git-Url: https://git.kernel.dk/?a=commitdiff_plain;h=cda689f8708b6bef0b921c3a17fcdecbe959a079;p=linux-block.git Merge tag 'csky-for-linus-5.13-rc1' of git://github.com/c-sky/csky-linux Pull arch/csky updates from Guo Ren: "Just cleanups" * tag 'csky-for-linus-5.13-rc1' of git://github.com/c-sky/csky-linux: csky: uaccess.h: Coding convention with asm generic csky: fix syscache.c fallthrough warning csky: Fixup typos csky: Remove duplicate include in arch/csky/kernel/entry.S --- cda689f8708b6bef0b921c3a17fcdecbe959a079 diff --cc arch/csky/lib/usercopy.c index f45b707f059f,a71836056fc8..c5d394a0ae78 --- a/arch/csky/lib/usercopy.c +++ b/arch/csky/lib/usercopy.c @@@ -80,43 -165,43 +165,43 @@@ EXPORT_SYMBOL(raw_copy_to_user) */ long __strncpy_from_user(char *dst, const char *src, long count) { - long res; + long res, faultres; + int tmp; - __do_strncpy_from_user(dst, src, count, res); - return res; - } - EXPORT_SYMBOL(__strncpy_from_user); - - /* - * strncpy_from_user: - Copy a NUL terminated string from userspace. - * @dst: Destination address, in kernel space. This buffer must be at - * least @count bytes long. - * @src: Source address, in user space. - * @count: Maximum number of bytes to copy, including the trailing NUL. - * - * Copies a NUL-terminated string from userspace to kernel space. - * - * On success, returns the length of the string (not including the trailing - * NUL). - * - * If access to userspace fails, returns -EFAULT (some data may have been - * copied). - * - * If @count is smaller than the length of the string, copies @count bytes - * and returns @count. - */ - long strncpy_from_user(char *dst, const char *src, long count) - { - long res = -EFAULT; + __asm__ __volatile__( + " cmpnei %3, 0 \n" + " bf 4f \n" + "1: cmpnei %1, 0 \n" + " bf 5f \n" + "2: ldb %4, (%3, 0) \n" + " stb %4, (%2, 0) \n" + " cmpnei %4, 0 \n" + " bf 3f \n" + " addi %3, 1 \n" + " addi %2, 1 \n" + " subi %1, 1 \n" + " br 1b \n" + "3: subu %0, %1 \n" + " br 5f \n" + "4: mov %0, %5 \n" + " br 5f \n" + ".section __ex_table, \"a\" \n" + ".align 2 \n" + ".long 2b, 4b \n" + ".previous \n" + "5: \n" + : "=r"(res), "=r"(count), "=r"(dst), + "=r"(src), "=r"(tmp), "=r"(faultres) + : "5"(-EFAULT), "0"(count), "1"(count), + "2"(dst), "3"(src) + : "memory"); - if (access_ok(src, 1)) - __do_strncpy_from_user(dst, src, count, res); return res; } - EXPORT_SYMBOL(strncpy_from_user); + EXPORT_SYMBOL(__strncpy_from_user); /* - * strlen_user: - Get the size of a string in user space. + * strnlen_user: - Get the size of a string in user space. * @str: The string to measure. * @n: The maximum valid length *