diff -u linux-2.6.32.16/arch/x86/include/asm/uaccess.h linux-2.6.32.16-new/arch/x86/include/asm/uaccess.h --- linux-2.6.32.16/arch/x86/include/asm/uaccess.h 2010-07-09 14:50:35.000000000 -0400 +++ linux-2.6.32.16-new/arch/x86/include/asm/uaccess.h 2010-07-11 20:46:01.000000000 -0400 @@ -213,9 +213,18 @@ __ret_gu; \ }) +#if defined(CONFIG_X86_64) && defined(CONFIG_PAX_MEMORY_UDEREF) +#define __put_user_x(size, x, ptr, __ret_pu) \ + ({ \ + int __dummy; \ + asm volatile("call __put_user_" #size : "=a" (__ret_pu), "=c" (__dummy) \ + : "0" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx", "ecx"); \ + }) +#else #define __put_user_x(size, x, ptr, __ret_pu) \ asm volatile("call __put_user_" #size : "=a" (__ret_pu) \ : "0" ((typeof(*(ptr)))(x)), "c" (ptr) : "ebx") +#endif #ifdef CONFIG_X86_32 #define _ASM_LOAD_USER_DS(ds) "movw %w" #ds ",%%ds\n"