diff options
Diffstat (limited to 'mm/maccess.c')
-rw-r--r-- | mm/maccess.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/mm/maccess.c b/mm/maccess.c index 24f81b971403..ac40796cfb15 100644 --- a/mm/maccess.c +++ b/mm/maccess.c | |||
@@ -17,11 +17,14 @@ | |||
17 | long probe_kernel_read(void *dst, void *src, size_t size) | 17 | long probe_kernel_read(void *dst, void *src, size_t size) |
18 | { | 18 | { |
19 | long ret; | 19 | long ret; |
20 | mm_segment_t old_fs = get_fs(); | ||
20 | 21 | ||
22 | set_fs(KERNEL_DS); | ||
21 | pagefault_disable(); | 23 | pagefault_disable(); |
22 | ret = __copy_from_user_inatomic(dst, | 24 | ret = __copy_from_user_inatomic(dst, |
23 | (__force const void __user *)src, size); | 25 | (__force const void __user *)src, size); |
24 | pagefault_enable(); | 26 | pagefault_enable(); |
27 | set_fs(old_fs); | ||
25 | 28 | ||
26 | return ret ? -EFAULT : 0; | 29 | return ret ? -EFAULT : 0; |
27 | } | 30 | } |
@@ -39,10 +42,13 @@ EXPORT_SYMBOL_GPL(probe_kernel_read); | |||
39 | long probe_kernel_write(void *dst, void *src, size_t size) | 42 | long probe_kernel_write(void *dst, void *src, size_t size) |
40 | { | 43 | { |
41 | long ret; | 44 | long ret; |
45 | mm_segment_t old_fs = get_fs(); | ||
42 | 46 | ||
47 | set_fs(KERNEL_DS); | ||
43 | pagefault_disable(); | 48 | pagefault_disable(); |
44 | ret = __copy_to_user_inatomic((__force void __user *)dst, src, size); | 49 | ret = __copy_to_user_inatomic((__force void __user *)dst, src, size); |
45 | pagefault_enable(); | 50 | pagefault_enable(); |
51 | set_fs(old_fs); | ||
46 | 52 | ||
47 | return ret ? -EFAULT : 0; | 53 | return ret ? -EFAULT : 0; |
48 | } | 54 | } |