Commit 6144a85a0e018c19bc4b24f7eb6c1f3f7431813d
1 parent
2c1f1895ef
Exists in
master
and in
4 other branches
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>
Showing 2 changed files with 12 additions and 3 deletions Side-by-side Diff
include/linux/uaccess.h
... | ... | @@ -94,6 +94,7 @@ |
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 |
... | ... | @@ -104,7 +105,8 @@ |
104 | 105 | * Safely write to address @dst from the buffer at @src. If a kernel fault |
105 | 106 | * happens, handle that and return -EFAULT. |
106 | 107 | */ |
107 | -extern long 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 | +extern long notrace __probe_kernel_write(void *dst, void *src, size_t size); | |
108 | 110 | |
109 | 111 | #endif /* __LINUX_UACCESS_H__ */ |
mm/maccess.c
... | ... | @@ -14,7 +14,11 @@ |
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(); |
... | ... | @@ -39,7 +43,10 @@ |
39 | 43 | * Safely write to address @dst from the buffer at @src. If a kernel fault |
40 | 44 | * happens, handle that and return -EFAULT. |
41 | 45 | */ |
42 | -long notrace __weak probe_kernel_write(void *dst, void *src, size_t size) | |
46 | +long __weak probe_kernel_write(void *dst, void *src, size_t size) | |
47 | + __attribute__((alias("__probe_kernel_write"))); | |
48 | + | |
49 | +long __probe_kernel_write(void *dst, void *src, size_t size) | |
43 | 50 | { |
44 | 51 | long ret; |
45 | 52 | mm_segment_t old_fs = get_fs(); |