Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

maccess,probe_kernel: Allow arch specific override probe_kernel_(read|write)

Some archs such as blackfin, would like to have an arch specific
probe_kernel_read() and probe_kernel_write() implementation which can
fall back to the generic implementation if no special operations are
needed.

CC: Thomas Gleixner <tglx@linutronix.de>
CC: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Jason Wessel <jason.wessel@windriver.com>
Signed-off-by: Mike Frysinger <vapier@gentoo.org>

+12 -3
+3 -1
include/linux/uaccess.h
··· 94 94 * happens, handle that and return -EFAULT. 95 95 */ 96 96 extern long probe_kernel_read(void *dst, void *src, size_t size); 97 + extern long __probe_kernel_read(void *dst, void *src, size_t size); 97 98 98 99 /* 99 100 * probe_kernel_write(): safely attempt to write to a location ··· 105 104 * Safely write to address @dst from the buffer at @src. If a kernel fault 106 105 * happens, handle that and return -EFAULT. 107 106 */ 108 - extern long probe_kernel_write(void *dst, void *src, size_t size); 107 + extern long notrace probe_kernel_write(void *dst, void *src, size_t size); 108 + extern long notrace __probe_kernel_write(void *dst, void *src, size_t size); 109 109 110 110 #endif /* __LINUX_UACCESS_H__ */
+9 -2
mm/maccess.c
··· 14 14 * Safely read from address @src to the buffer at @dst. If a kernel fault 15 15 * happens, handle that and return -EFAULT. 16 16 */ 17 - long probe_kernel_read(void *dst, void *src, size_t size) 17 + 18 + long __weak probe_kernel_read(void *dst, void *src, size_t size) 19 + __attribute__((alias("__probe_kernel_read"))); 20 + 21 + long __probe_kernel_read(void *dst, void *src, size_t size) 18 22 { 19 23 long ret; 20 24 mm_segment_t old_fs = get_fs(); ··· 43 39 * Safely write to address @dst from the buffer at @src. If a kernel fault 44 40 * happens, handle that and return -EFAULT. 45 41 */ 46 - long notrace __weak probe_kernel_write(void *dst, void *src, size_t size) 42 + long __weak probe_kernel_write(void *dst, void *src, size_t size) 43 + __attribute__((alias("__probe_kernel_write"))); 44 + 45 + long __probe_kernel_write(void *dst, void *src, size_t size) 47 46 { 48 47 long ret; 49 48 mm_segment_t old_fs = get_fs();