Ensure that 64-bit get_user/put_user only transfer to
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Mon, 22 Aug 2005 09:52:06 +0000 (09:52 +0000)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Mon, 22 Aug 2005 09:52:06 +0000 (09:52 +0000)
a 64-bit local variable. Some gcc versions have bugs
if this restriction isn't observed.

Signed-off-by: Keir Fraser <keir@xensource.com>
xen/include/asm-x86/x86_32/uaccess.h

index 176c8401fe3ceb4d114e4f42cd5a2c087d31323d..1ea7f86cae97c189fa03819d8813088f592c60bb 100644 (file)
 #define array_access_ok(addr,count,size) \
     (likely(count < (~0UL/size)) && access_ok(addr,count*size))
 
+/* Undefined function to catch size mismatches on 64-bit get_user/put_user. */
+extern void __uaccess_var_not_u64(void);
+
 #define __put_user_u64(x, addr, retval, errret)                        \
+       if (sizeof(x) != 8) __uaccess_var_not_u64();            \
        __asm__ __volatile__(                                   \
                "1:     movl %%eax,0(%2)\n"                     \
                "2:     movl %%edx,4(%2)\n"                     \
@@ -52,6 +56,7 @@ do {                                                                  \
 } while (0)
 
 #define __get_user_u64(x, addr, retval, errret)                        \
+       if (sizeof(x) != 8) __uaccess_var_not_u64();            \
        __asm__ __volatile__(                                   \
                "1:     movl 0(%2),%%eax\n"                     \
                "2:     movl 4(%2),%%edx\n"                     \