@@ -43,21 +43,6 @@ static inline bool __access_ok(unsigned long addr, unsigned long size)
4343 * exception handling means that it's no longer "just"...)
4444 *
4545 */
46- #define __put_user_size (x , ptr , size , retval ) \
47- do { \
48- __label__ __pu_failed; \
49- \
50- retval = 0; \
51- allow_write_to_user(ptr, size); \
52- __put_user_size_goto(x, ptr, size, __pu_failed); \
53- prevent_write_to_user(ptr, size); \
54- break; \
55- \
56- __pu_failed: \
57- retval = -EFAULT; \
58- prevent_write_to_user(ptr, size); \
59- } while (0)
60-
6146#define __put_user (x , ptr ) \
6247({ \
6348 long __pu_err; \
@@ -66,23 +51,29 @@ __pu_failed: \
6651 __typeof__(sizeof(*(ptr))) __pu_size = sizeof(*(ptr)); \
6752 \
6853 might_fault(); \
69- __put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \
54+ do { \
55+ __label__ __pu_failed; \
56+ \
57+ allow_write_to_user(__pu_addr, __pu_size); \
58+ __put_user_size_goto(__pu_val, __pu_addr, __pu_size, __pu_failed); \
59+ prevent_write_to_user(__pu_addr, __pu_size); \
60+ __pu_err = 0; \
61+ break; \
62+ \
63+ __pu_failed: \
64+ prevent_write_to_user(__pu_addr, __pu_size); \
65+ __pu_err = -EFAULT; \
66+ } while (0); \
7067 \
7168 __pu_err; \
7269})
7370
7471#define put_user (x , ptr ) \
7572({ \
76- long __pu_err = -EFAULT; \
77- __typeof__(*(ptr)) __user *__pu_addr = (ptr); \
78- __typeof__(*(ptr)) __pu_val = (__typeof__(*(ptr)))(x); \
79- __typeof__(sizeof(*(ptr))) __pu_size = sizeof(*(ptr)); \
73+ __typeof__(*(ptr)) __user *_pu_addr = (ptr); \
8074 \
81- might_fault(); \
82- if (access_ok(__pu_addr, __pu_size)) \
83- __put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \
84- \
85- __pu_err; \
75+ access_ok(_pu_addr, sizeof(*(ptr))) ? \
76+ __put_user(x, _pu_addr) : -EFAULT; \
8677})
8778
8879/*
@@ -192,13 +183,6 @@ do { \
192183 } \
193184} while (0)
194185
195- #define __get_user_size (x , ptr , size , retval ) \
196- do { \
197- allow_read_from_user(ptr, size); \
198- __get_user_size_allowed(x, ptr, size, retval); \
199- prevent_read_from_user(ptr, size); \
200- } while (0)
201-
202186/*
203187 * This is a type: either unsigned long, if the argument fits into
204188 * that type, or otherwise unsigned long long.
@@ -214,25 +198,21 @@ do { \
214198 __typeof__(sizeof(*(ptr))) __gu_size = sizeof(*(ptr)); \
215199 \
216200 might_fault(); \
217- __get_user_size(__gu_val, __gu_addr, __gu_size, __gu_err); \
201+ allow_read_from_user(__gu_addr, __gu_size); \
202+ __get_user_size_allowed(__gu_val, __gu_addr, __gu_size, __gu_err); \
203+ prevent_read_from_user(__gu_addr, __gu_size); \
218204 (x) = (__typeof__(*(ptr)))__gu_val; \
219205 \
220206 __gu_err; \
221207})
222208
223209#define get_user (x , ptr ) \
224210({ \
225- long __gu_err = -EFAULT; \
226- __long_type(*(ptr)) __gu_val = 0; \
227- __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
228- __typeof__(sizeof(*(ptr))) __gu_size = sizeof(*(ptr)); \
229- \
230- might_fault(); \
231- if (access_ok(__gu_addr, __gu_size)) \
232- __get_user_size(__gu_val, __gu_addr, __gu_size, __gu_err); \
233- (x) = (__force __typeof__(*(ptr)))__gu_val; \
211+ __typeof__(*(ptr)) __user *_gu_addr = (ptr); \
234212 \
235- __gu_err; \
213+ access_ok(_gu_addr, sizeof(*(ptr))) ? \
214+ __get_user(x, _gu_addr) : \
215+ ((x) = (__force __typeof__(*(ptr)))0, -EFAULT); \
236216})
237217
238218/* more complex routines */
0 commit comments