mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-08-21 16:29:59 +00:00
[PATCH] i386: Add a temporary to make put_user more type safe
In some code I am developing I had occasion to change the type of a variable. This made the value put_user was putting to user space wrong. But the code continued to build cleanly without errors. Introducing a temporary fixes this problem and at least with gcc-3.3.5 does not cause gcc any problems with optimizing out the temporary. gcc-4.x using SSA internally ought to be even better at optimizing out temporaries, so I don't expect a temporary to become a problem. Especially because in all correct cases the types on both sides of the assignment to the temporary are the same. Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
4f88651125
commit
30e931d409
1 changed files with 7 additions and 5 deletions
|
@ -197,13 +197,15 @@ extern void __put_user_8(void);
|
|||
|
||||
#define put_user(x,ptr) \
|
||||
({ int __ret_pu; \
|
||||
__typeof__(*(ptr)) __pu_val; \
|
||||
__chk_user_ptr(ptr); \
|
||||
__pu_val = x; \
|
||||
switch(sizeof(*(ptr))) { \
|
||||
case 1: __put_user_1(x, ptr); break; \
|
||||
case 2: __put_user_2(x, ptr); break; \
|
||||
case 4: __put_user_4(x, ptr); break; \
|
||||
case 8: __put_user_8(x, ptr); break; \
|
||||
default:__put_user_X(x, ptr); break; \
|
||||
case 1: __put_user_1(__pu_val, ptr); break; \
|
||||
case 2: __put_user_2(__pu_val, ptr); break; \
|
||||
case 4: __put_user_4(__pu_val, ptr); break; \
|
||||
case 8: __put_user_8(__pu_val, ptr); break; \
|
||||
default:__put_user_X(__pu_val, ptr); break; \
|
||||
} \
|
||||
__ret_pu; \
|
||||
})
|
||||
|
|
Loading…
Reference in a new issue