# HG changeset patch
# User kaf24@xxxxxxxxxxxxxxxxxxxx
# Node ID 082a537ff4dec66574788126b3b047ef76e59803
# Parent 684d8193344209f3bbce4b07977f9d51ec48f63e
Fix __get_user() and friends to work correctly for
64-bit quantities on x86/32. Should fix writable
pagetables on PAE.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
diff -r 684d81933442 -r 082a537ff4de xen/arch/x86/mm.c
--- a/xen/arch/x86/mm.c Thu Aug 18 16:04:00 2005
+++ b/xen/arch/x86/mm.c Thu Aug 18 17:04:48 2005
@@ -3299,8 +3299,8 @@
/* Finally, make the p.t. page writable by the guest OS. */
l1e_add_flags(pte, _PAGE_RW);
- if ( unlikely(__copy_to_user(&linear_pg_table[l1_linear_offset(addr)],
- &pte, sizeof(pte))) )
+ if ( unlikely(__put_user(pte.l1,
+ &linear_pg_table[l1_linear_offset(addr)].l1)) )
{
MEM_LOG("ptwr: Could not update pte at %p", (unsigned long *)
&linear_pg_table[l1_linear_offset(addr)]);
diff -r 684d81933442 -r 082a537ff4de xen/include/asm-x86/uaccess.h
--- a/xen/include/asm-x86/uaccess.h Thu Aug 18 16:04:00 2005
+++ b/xen/include/asm-x86/uaccess.h Thu Aug 18 17:04:48 2005
@@ -125,22 +125,20 @@
__pu_err; \
})
-#define __get_user_nocheck(x,ptr,size) \
-({ \
- long __gu_err, __gu_val; \
- __get_user_size(__gu_val,(ptr),(size),__gu_err,-EFAULT);\
- (x) = (__typeof__(*(ptr)))__gu_val; \
- __gu_err; \
+#define __get_user_nocheck(x,ptr,size) \
+({ \
+ long __gu_err; \
+ __get_user_size((x),(ptr),(size),__gu_err,-EFAULT); \
+ __gu_err; \
})
-#define __get_user_check(x,ptr,size) \
-({ \
- long __gu_err, __gu_val; \
- __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
- __get_user_size(__gu_val,__gu_addr,(size),__gu_err,-EFAULT); \
- (x) = (__typeof__(*(ptr)))__gu_val; \
- if (!__addr_ok(__gu_addr)) __gu_err = -EFAULT; \
- __gu_err; \
+#define __get_user_check(x,ptr,size) \
+({ \
+ long __gu_err; \
+ __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
+ __get_user_size((x),__gu_addr,(size),__gu_err,-EFAULT); \
+ if (!__addr_ok(__gu_addr)) __gu_err = -EFAULT; \
+ __gu_err; \
})
struct __large_struct { unsigned long buf[100]; };
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|