Loading arch/m68k/Kconfig +2 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ config M68K select GENERIC_IRQ_SHOW select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS select GENERIC_CPU_DEVICES select GENERIC_STRNCPY_FROM_USER if MMU select GENERIC_STRNLEN_USER if MMU select FPU if MMU select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE Loading arch/m68k/include/asm/Kbuild +2 −0 Original line number Diff line number Diff line include include/asm-generic/Kbuild.asm header-y += cachectl.h generic-y += word-at-a-time.h arch/m68k/include/asm/uaccess_mm.h +7 −4 Original line number Diff line number Diff line Loading @@ -379,12 +379,15 @@ __constant_copy_to_user(void __user *to, const void *from, unsigned long n) #define copy_from_user(to, from, n) __copy_from_user(to, from, n) #define copy_to_user(to, from, n) __copy_to_user(to, from, n) long strncpy_from_user(char *dst, const char __user *src, long count); long strnlen_user(const char __user *src, long n); #define user_addr_max() \ (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL) extern long strncpy_from_user(char *dst, const char __user *src, long count); extern __must_check long strlen_user(const char __user *str); extern __must_check long strnlen_user(const char __user *str, long n); unsigned long __clear_user(void __user *to, unsigned long n); #define clear_user __clear_user #define strlen_user(str) strnlen_user(str, 32767) #endif /* _M68K_UACCESS_H */ arch/m68k/lib/uaccess.c +0 −74 Original line number Diff line number Diff line Loading @@ -103,80 +103,6 @@ unsigned long __generic_copy_to_user(void __user *to, const void *from, } EXPORT_SYMBOL(__generic_copy_to_user); /* * Copy a null terminated string from userspace. */ long strncpy_from_user(char *dst, const char __user *src, long count) { long res; char c; if (count <= 0) return count; asm volatile ("\n" "1: "MOVES".b (%2)+,%4\n" " move.b %4,(%1)+\n" " jeq 2f\n" " subq.l #1,%3\n" " jne 1b\n" "2: sub.l %3,%0\n" "3:\n" " .section .fixup,\"ax\"\n" " .even\n" "10: move.l %5,%0\n" " jra 3b\n" " .previous\n" "\n" " .section __ex_table,\"a\"\n" " .align 4\n" " .long 1b,10b\n" " .previous" : "=d" (res), "+a" (dst), "+a" (src), "+r" (count), "=&d" (c) : "i" (-EFAULT), "0" (count)); return res; } EXPORT_SYMBOL(strncpy_from_user); /* * Return the size of a string (including the ending 0) * * Return 0 on exception, a value greater than N if too long */ long strnlen_user(const char __user *src, long n) { char c; long res; asm volatile ("\n" "1: subq.l #1,%1\n" " jmi 3f\n" "2: "MOVES".b (%0)+,%2\n" " tst.b %2\n" " jne 1b\n" " jra 4f\n" "\n" "3: addq.l #1,%0\n" "4: sub.l %4,%0\n" "5:\n" " .section .fixup,\"ax\"\n" " .even\n" "20: sub.l %0,%0\n" " jra 5b\n" " .previous\n" "\n" " .section __ex_table,\"a\"\n" " .align 4\n" " .long 2b,20b\n" " .previous\n" : "=&a" (res), "+d" (n), "=&d" (c) : "0" (src), "r" (src)); return res; } EXPORT_SYMBOL(strnlen_user); /* * Zero Userspace */ Loading Loading
arch/m68k/Kconfig +2 −0 Original line number Diff line number Diff line Loading @@ -7,6 +7,8 @@ config M68K select GENERIC_IRQ_SHOW select ARCH_HAVE_NMI_SAFE_CMPXCHG if RMW_INSNS select GENERIC_CPU_DEVICES select GENERIC_STRNCPY_FROM_USER if MMU select GENERIC_STRNLEN_USER if MMU select FPU if MMU select ARCH_USES_GETTIMEOFFSET if MMU && !COLDFIRE Loading
arch/m68k/include/asm/Kbuild +2 −0 Original line number Diff line number Diff line include include/asm-generic/Kbuild.asm header-y += cachectl.h generic-y += word-at-a-time.h
arch/m68k/include/asm/uaccess_mm.h +7 −4 Original line number Diff line number Diff line Loading @@ -379,12 +379,15 @@ __constant_copy_to_user(void __user *to, const void *from, unsigned long n) #define copy_from_user(to, from, n) __copy_from_user(to, from, n) #define copy_to_user(to, from, n) __copy_to_user(to, from, n) long strncpy_from_user(char *dst, const char __user *src, long count); long strnlen_user(const char __user *src, long n); #define user_addr_max() \ (segment_eq(get_fs(), USER_DS) ? TASK_SIZE : ~0UL) extern long strncpy_from_user(char *dst, const char __user *src, long count); extern __must_check long strlen_user(const char __user *str); extern __must_check long strnlen_user(const char __user *str, long n); unsigned long __clear_user(void __user *to, unsigned long n); #define clear_user __clear_user #define strlen_user(str) strnlen_user(str, 32767) #endif /* _M68K_UACCESS_H */
arch/m68k/lib/uaccess.c +0 −74 Original line number Diff line number Diff line Loading @@ -103,80 +103,6 @@ unsigned long __generic_copy_to_user(void __user *to, const void *from, } EXPORT_SYMBOL(__generic_copy_to_user); /* * Copy a null terminated string from userspace. */ long strncpy_from_user(char *dst, const char __user *src, long count) { long res; char c; if (count <= 0) return count; asm volatile ("\n" "1: "MOVES".b (%2)+,%4\n" " move.b %4,(%1)+\n" " jeq 2f\n" " subq.l #1,%3\n" " jne 1b\n" "2: sub.l %3,%0\n" "3:\n" " .section .fixup,\"ax\"\n" " .even\n" "10: move.l %5,%0\n" " jra 3b\n" " .previous\n" "\n" " .section __ex_table,\"a\"\n" " .align 4\n" " .long 1b,10b\n" " .previous" : "=d" (res), "+a" (dst), "+a" (src), "+r" (count), "=&d" (c) : "i" (-EFAULT), "0" (count)); return res; } EXPORT_SYMBOL(strncpy_from_user); /* * Return the size of a string (including the ending 0) * * Return 0 on exception, a value greater than N if too long */ long strnlen_user(const char __user *src, long n) { char c; long res; asm volatile ("\n" "1: subq.l #1,%1\n" " jmi 3f\n" "2: "MOVES".b (%0)+,%2\n" " tst.b %2\n" " jne 1b\n" " jra 4f\n" "\n" "3: addq.l #1,%0\n" "4: sub.l %4,%0\n" "5:\n" " .section .fixup,\"ax\"\n" " .even\n" "20: sub.l %0,%0\n" " jra 5b\n" " .previous\n" "\n" " .section __ex_table,\"a\"\n" " .align 4\n" " .long 2b,20b\n" " .previous\n" : "=&a" (res), "+d" (n), "=&d" (c) : "0" (src), "r" (src)); return res; } EXPORT_SYMBOL(strnlen_user); /* * Zero Userspace */ Loading