From: kaf24@firebug.cl.cam.ac.uk Date: Mon, 22 Aug 2005 09:52:06 +0000 (+0000) Subject: Ensure that 64-bit get_user/put_user only transfer to X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~16878^2~1 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=aa82c3b80739646e75e50920b4a05c2ef55b49f6;p=xen.git Ensure that 64-bit get_user/put_user only transfer to a 64-bit local variable. Some gcc versions have bugs if this restriction isn't observed. Signed-off-by: Keir Fraser --- diff --git a/xen/include/asm-x86/x86_32/uaccess.h b/xen/include/asm-x86/x86_32/uaccess.h index 176c8401fe..1ea7f86cae 100644 --- a/xen/include/asm-x86/x86_32/uaccess.h +++ b/xen/include/asm-x86/x86_32/uaccess.h @@ -22,7 +22,11 @@ #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" \