Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
maccess.c
Go to the documentation of this file.
1 /*
2  * Access kernel memory without faulting.
3  */
4 #include <linux/export.h>
5 #include <linux/mm.h>
6 #include <linux/uaccess.h>
7 
18 long __weak probe_kernel_read(void *dst, const void *src, size_t size)
19  __attribute__((alias("__probe_kernel_read")));
20 
21 long __probe_kernel_read(void *dst, const void *src, size_t size)
22 {
23  long ret;
24  mm_segment_t old_fs = get_fs();
25 
27  pagefault_disable();
28  ret = __copy_from_user_inatomic(dst,
29  (__force const void __user *)src, size);
30  pagefault_enable();
31  set_fs(old_fs);
32 
33  return ret ? -EFAULT : 0;
34 }
36 
46 long __weak probe_kernel_write(void *dst, const void *src, size_t size)
47  __attribute__((alias("__probe_kernel_write")));
48 
49 long __probe_kernel_write(void *dst, const void *src, size_t size)
50 {
51  long ret;
52  mm_segment_t old_fs = get_fs();
53 
55  pagefault_disable();
56  ret = __copy_to_user_inatomic((__force void __user *)dst, src, size);
57  pagefault_enable();
58  set_fs(old_fs);
59 
60  return ret ? -EFAULT : 0;
61 }