Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Kernel v2.6.25-git8 /mm/maccess.c

Filename:/mm/maccess.c
Lines Added:55
Lines Deleted:0
Also changed in: (Previous) 2.6.25-git7  2.6.25-git6  2.6.25-git5  2.6.25-git4  2.6.25-git3  2.6.25-git2 
(Following) 2.6.25-git9  2.6.25-git10  2.6.25-git11  2.6.25-git12  2.6.25-git13  2.6.25-git14 

Location
[  2.6.25-git8
  [  mm
     o  maccess.c

Patch

diff --git a/mm/maccess.c b/mm/maccess.c
new file mode 100644
index 0000000..ac40796
--- /dev/null
+++ b/mm/maccess.c
@@ -0,0 +1,55 @@
+/*
+ * Access kernel memory without faulting.
+ */
+#include <linux/uaccess.h>
+#include <linux/module.h>
+#include <linux/mm.h>
+
+/**
+ * probe_kernel_read(): safely attempt to read from a location
+ * @dst: pointer to the buffer that shall take the data
+ * @src: address to read from
+ * @size: size of the data chunk
+ *
+ * Safely read from address @src to the buffer at @dst.  If a kernel fault
+ * happens, handle that and return -EFAULT.
+ */
+long probe_kernel_read(void *dst, void *src, size_t size)
+{
+   long ret;
+   mm_segment_t old_fs = get_fs();
+
+   set_fs(KERNEL_DS);
+   pagefault_disable();
+   ret = __copy_from_user_inatomic(dst,
+         (__force const void __user *)src, size);
+   pagefault_enable();
+   set_fs(old_fs);
+
+   return ret ? -EFAULT : 0;
+}
+EXPORT_SYMBOL_GPL(probe_kernel_read);
+
+/**
+ * probe_kernel_write(): safely attempt to write to a location
+ * @dst: address to write to
+ * @src: pointer to the data that shall be written
+ * @size: size of the data chunk
+ *
+ * Safely write to address @dst from the buffer at @src.  If a kernel fault
+ * happens, handle that and return -EFAULT.
+ */
+long probe_kernel_write(void *dst, void *src, size_t size)
+{
+   long ret;
+   mm_segment_t old_fs = get_fs();
+
+   set_fs(KERNEL_DS);
+   pagefault_disable();
+   ret = __copy_to_user_inatomic((__force void __user *)dst, src, size);
+   pagefault_enable();
+   set_fs(old_fs);
+
+   return ret ? -EFAULT : 0;
+}
+EXPORT_SYMBOL_GPL(probe_kernel_write);


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.