Skip to content

Commit cd03090

Browse files
Christoph Hellwigtorvalds
authored andcommitted
maccess: remove probe_read_common and probe_write_common
Each of the helpers has just two callers, which also different in dealing with kernel or userspace pointers. Just open code the logic in the callers. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: "H. Peter Anvin" <hpa@zytor.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: http://lkml.kernel.org/r/20200521152301.2587579-10-hch@lst.de Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent 02dddb1 commit cd03090

File tree

1 file changed

+29
-34
lines changed

1 file changed

+29
-34
lines changed

mm/maccess.c

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,30 +6,6 @@
66
#include <linux/mm.h>
77
#include <linux/uaccess.h>
88

9-
static __always_inline long
10-
probe_read_common(void *dst, const void __user *src, size_t size)
11-
{
12-
long ret;
13-
14-
pagefault_disable();
15-
ret = __copy_from_user_inatomic(dst, src, size);
16-
pagefault_enable();
17-
18-
return ret ? -EFAULT : 0;
19-
}
20-
21-
static __always_inline long
22-
probe_write_common(void __user *dst, const void *src, size_t size)
23-
{
24-
long ret;
25-
26-
pagefault_disable();
27-
ret = __copy_to_user_inatomic(dst, src, size);
28-
pagefault_enable();
29-
30-
return ret ? -EFAULT : 0;
31-
}
32-
339
/**
3410
* probe_kernel_read(): safely attempt to read from any location
3511
* @dst: pointer to the buffer that shall take the data
@@ -70,10 +46,15 @@ long __probe_kernel_read(void *dst, const void *src, size_t size)
7046
mm_segment_t old_fs = get_fs();
7147

7248
set_fs(KERNEL_DS);
73-
ret = probe_read_common(dst, (__force const void __user *)src, size);
49+
pagefault_disable();
50+
ret = __copy_from_user_inatomic(dst, (__force const void __user *)src,
51+
size);
52+
pagefault_enable();
7453
set_fs(old_fs);
7554

76-
return ret;
55+
if (ret)
56+
return -EFAULT;
57+
return 0;
7758
}
7859
EXPORT_SYMBOL_GPL(probe_kernel_read);
7960

@@ -92,11 +73,16 @@ long probe_user_read(void *dst, const void __user *src, size_t size)
9273
mm_segment_t old_fs = get_fs();
9374

9475
set_fs(USER_DS);
95-
if (access_ok(src, size))
96-
ret = probe_read_common(dst, src, size);
76+
if (access_ok(src, size)) {
77+
pagefault_disable();
78+
ret = __copy_from_user_inatomic(dst, src, size);
79+
pagefault_enable();
80+
}
9781
set_fs(old_fs);
9882

99-
return ret;
83+
if (ret)
84+
return -EFAULT;
85+
return 0;
10086
}
10187
EXPORT_SYMBOL_GPL(probe_user_read);
10288

@@ -115,10 +101,14 @@ long probe_kernel_write(void *dst, const void *src, size_t size)
115101
mm_segment_t old_fs = get_fs();
116102

117103
set_fs(KERNEL_DS);
118-
ret = probe_write_common((__force void __user *)dst, src, size);
104+
pagefault_disable();
105+
ret = __copy_to_user_inatomic((__force void __user *)dst, src, size);
106+
pagefault_enable();
119107
set_fs(old_fs);
120108

121-
return ret;
109+
if (ret)
110+
return -EFAULT;
111+
return 0;
122112
}
123113

124114
/**
@@ -136,11 +126,16 @@ long probe_user_write(void __user *dst, const void *src, size_t size)
136126
mm_segment_t old_fs = get_fs();
137127

138128
set_fs(USER_DS);
139-
if (access_ok(dst, size))
140-
ret = probe_write_common(dst, src, size);
129+
if (access_ok(dst, size)) {
130+
pagefault_disable();
131+
ret = __copy_to_user_inatomic(dst, src, size);
132+
pagefault_enable();
133+
}
141134
set_fs(old_fs);
142135

143-
return ret;
136+
if (ret)
137+
return -EFAULT;
138+
return 0;
144139
}
145140
EXPORT_SYMBOL_GPL(probe_user_write);
146141

0 commit comments

Comments
 (0)