amd64: fix get_user() on bitwise
authorAl Viro <viro@ftp.linux.org.uk>
Thu, 26 Jul 2007 16:35:39 +0000 (17:35 +0100)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 26 Jul 2007 18:11:57 +0000 (11:11 -0700)
We really need force-cast when converting to final result type;
unsigned long can be silently converted to integer types and
to pointers, but not to bitwise.

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
include/asm-x86_64/uaccess.h

index 9df30b939c4eb1121285e0cad59dd6385ca4ddc4..f4ce8768ad443648fc637bf1cdb128e25a4f8a44 100644 (file)
@@ -100,7 +100,7 @@ struct exception_table_entry
        case 8:  __get_user_x(8,__ret_gu,__val_gu,ptr); break;          \
        default: __get_user_bad(); break;                               \
        }                                                               \
-       (x) = (typeof(*(ptr)))__val_gu;                         \
+       (x) = (__force typeof(*(ptr)))__val_gu;                         \
        __ret_gu;                                                       \
 })
 
@@ -192,7 +192,7 @@ struct __large_struct { unsigned long buf[100]; };
        int __gu_err;                                           \
        unsigned long __gu_val;                                 \
        __get_user_size(__gu_val,(ptr),(size),__gu_err);        \
-       (x) = (typeof(*(ptr)))__gu_val;                 \
+       (x) = (__force typeof(*(ptr)))__gu_val;                 \
        __gu_err;                                               \
 })