git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
HWPOISON: return ENXIO on invalid page number
[safe/jmp/linux-2.6]
/
mm
/
maccess.c
diff --git
a/mm/maccess.c
b/mm/maccess.c
index
24f81b9
..
9073695
100644
(file)
--- a/
mm/maccess.c
+++ b/
mm/maccess.c
@@
-17,11
+17,14
@@
long probe_kernel_read(void *dst, void *src, size_t size)
{
long ret;
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();
pagefault_disable();
ret = __copy_from_user_inatomic(dst,
(__force const void __user *)src, size);
pagefault_enable();
+ set_fs(old_fs);
return ret ? -EFAULT : 0;
}
return ret ? -EFAULT : 0;
}
@@
-36,13
+39,16
@@
EXPORT_SYMBOL_GPL(probe_kernel_read);
* Safely write to address @dst from the buffer at @src. If a kernel fault
* happens, handle that and return -EFAULT.
*/
* 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
notrace __weak
probe_kernel_write(void *dst, void *src, size_t size)
{
long ret;
{
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();
pagefault_disable();
ret = __copy_to_user_inatomic((__force void __user *)dst, src, size);
pagefault_enable();
+ set_fs(old_fs);
return ret ? -EFAULT : 0;
}
return ret ? -EFAULT : 0;
}