[PATCH] s390: const pointer uaccess

Using __typeof__(*ptr) on a pointer to const makes the __x variable in
__get_user const as well.  The latest gcc will refuse to write to it.

Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
Martin Schwidefsky 2005-11-07 00:59:11 -08:00 committed by Linus Torvalds
parent cdb32dc90b
commit 1047aa7723
1 changed files with 22 additions and 6 deletions

View File

@ -200,21 +200,37 @@ extern int __put_user_bad(void) __attribute__((noreturn));
#define __get_user(x, ptr) \
({ \
__typeof__(*(ptr)) __x; \
int __gu_err; \
__chk_user_ptr(ptr); \
switch (sizeof(*(ptr))) { \
case 1: \
case 2: \
case 4: \
case 8: \
case 1: { \
unsigned char __x; \
__get_user_asm(__x, ptr, __gu_err); \
(x) = (__typeof__(*(ptr))) __x; \
break; \
}; \
case 2: { \
unsigned short __x; \
__get_user_asm(__x, ptr, __gu_err); \
(x) = (__typeof__(*(ptr))) __x; \
break; \
}; \
case 4: { \
unsigned int __x; \
__get_user_asm(__x, ptr, __gu_err); \
(x) = (__typeof__(*(ptr))) __x; \
break; \
}; \
case 8: { \
unsigned long long __x; \
__get_user_asm(__x, ptr, __gu_err); \
(x) = (__typeof__(*(ptr))) __x; \
break; \
}; \
default: \
__get_user_bad(); \
break; \
} \
(x) = __x; \
__gu_err; \
})