On Sun, 10 Feb 2008 21:05:40 +0100 Ingo Molnar wrote: > Subject: uaccess: add probe_kernel_write() > From: Ingo Molnar <[EMAIL PROTECTED]> > > add probe_kernel_read() and probe_kernel_write(). > > Uninlined and restricted to kernel range memory only, as suggested > by Linus. > > Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]> > --- > include/linux/uaccess.h | 22 ++++++++++++++++++++++ > mm/Makefile | 2 +- > mm/maccess.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++ > 3 files changed, 69 insertions(+), 1 deletion(-) > > Index: linux-kgdb.q/include/linux/uaccess.h > =================================================================== > --- linux-kgdb.q.orig/include/linux/uaccess.h > +++ linux-kgdb.q/include/linux/uaccess.h > @@ -84,4 +84,26 @@ static inline unsigned long __copy_from_ > ret; \ > }) > > +/* > + * probe_kernel_read(): safely attempt to read from a location
Please insert a hyphen/dash/'-' between function name and its short description on the line above and on other similar lines. Documentation/kernel-doc-nano-HOWTO.txt . > + * @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. > + */ > +extern long probe_kernel_read(void *dst, void *src, size_t size); > + > +/* > + * 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. > + */ > +extern long probe_kernel_write(void *dst, void *src, size_t size); > + > #endif /* __LINUX_UACCESS_H__ */ > Index: linux-kgdb.q/mm/maccess.c > =================================================================== > --- /dev/null > +++ linux-kgdb.q/mm/maccess.c > @@ -0,0 +1,46 @@ > +/* > + * Access kernel memory without faulting. > + */ > +#include <linux/uaccess.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; > + > + pagefault_disable(); > + ret = __copy_from_user_inatomic(dst, > + (__force const void __user *)src, size); > + pagefault_enable(); > + > + return ret ? -EFAULT : 0; > +} > + > +/** > + * 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; > + > + pagefault_disable(); > + ret = __copy_to_user_inatomic((__force void __user *)dst, src, size); > + pagefault_enable(); > + > + return ret ? -EFAULT : 0; > +} --- ~Randy -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/