Skip to content

Commit 487913a

Browse files
Zong LiGreentime Hu
authored andcommitted
nds32: Extract the checking and getting pointer to a macro
Signed-off-by: Zong Li <[email protected]> Acked-by: Greentime Hu <[email protected]> Signed-off-by: Greentime Hu <[email protected]>
1 parent 7ef3954 commit 487913a

File tree

1 file changed

+41
-39
lines changed

1 file changed

+41
-39
lines changed

arch/nds32/include/asm/uaccess.h

Lines changed: 41 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -75,54 +75,54 @@ static inline void set_fs(mm_segment_t fs)
7575
* versions are void (ie, don't return a value as such).
7676
*/
7777

78-
#define get_user(x, ptr) \
79-
({ \
80-
long __e = -EFAULT; \
81-
const __typeof__(*(ptr)) __user *__p = (ptr); \
82-
if (likely(access_ok(VERIFY_READ, __p, sizeof(*__p)))) { \
83-
__e = __get_user(x, __p); \
84-
} else { \
85-
(x) = 0; \
86-
} \
87-
__e; \
88-
})
78+
#define get_user __get_user \
8979

9080
#define __get_user(x, ptr) \
9181
({ \
9282
long __gu_err = 0; \
93-
__get_user_err((x), (ptr), __gu_err); \
83+
__get_user_check((x), (ptr), __gu_err); \
9484
__gu_err; \
9585
})
9686

9787
#define __get_user_error(x, ptr, err) \
9888
({ \
99-
__get_user_err((x), (ptr), err); \
89+
__get_user_check((x), (ptr), (err)); \
10090
(void)0; \
10191
})
10292

93+
#define __get_user_check(x, ptr, err) \
94+
({ \
95+
const __typeof__(*(ptr)) __user *__p = (ptr); \
96+
might_fault(); \
97+
if (access_ok(VERIFY_READ, __p, sizeof(*__p))) { \
98+
__get_user_err((x), __p, (err)); \
99+
} else { \
100+
(x) = 0; (err) = -EFAULT; \
101+
} \
102+
})
103+
103104
#define __get_user_err(x, ptr, err) \
104105
do { \
105-
const __typeof__(*(ptr)) __user *__gu_addr = (ptr); \
106106
unsigned long __gu_val; \
107-
__chk_user_ptr(__gu_addr); \
108-
switch (sizeof(*(__gu_addr))) { \
107+
__chk_user_ptr(ptr); \
108+
switch (sizeof(*(ptr))) { \
109109
case 1: \
110-
__get_user_asm("lbi", __gu_val, __gu_addr, (err)); \
110+
__get_user_asm("lbi", __gu_val, (ptr), (err)); \
111111
break; \
112112
case 2: \
113-
__get_user_asm("lhi", __gu_val, __gu_addr, (err)); \
113+
__get_user_asm("lhi", __gu_val, (ptr), (err)); \
114114
break; \
115115
case 4: \
116-
__get_user_asm("lwi", __gu_val, __gu_addr, (err)); \
116+
__get_user_asm("lwi", __gu_val, (ptr), (err)); \
117117
break; \
118118
case 8: \
119-
__get_user_asm_dword(__gu_val, __gu_addr, (err)); \
119+
__get_user_asm_dword(__gu_val, (ptr), (err)); \
120120
break; \
121121
default: \
122122
BUILD_BUG(); \
123123
break; \
124124
} \
125-
(x) = (__typeof__(*(__gu_addr)))__gu_val; \
125+
(x) = (__force __typeof__(*(ptr)))__gu_val; \
126126
} while (0)
127127

128128
#define __get_user_asm(inst, x, addr, err) \
@@ -170,15 +170,7 @@ do { \
170170
: "r"(addr), "i"(-EFAULT) \
171171
: "cc")
172172

173-
#define put_user(x, ptr) \
174-
({ \
175-
long __e = -EFAULT; \
176-
__typeof__(*(ptr)) __user *__p = (ptr); \
177-
if (likely(access_ok(VERIFY_WRITE, __p, sizeof(*__p)))) { \
178-
__e = __put_user(x, __p); \
179-
} \
180-
__e; \
181-
})
173+
#define put_user __put_user \
182174

183175
#define __put_user(x, ptr) \
184176
({ \
@@ -189,27 +181,37 @@ do { \
189181

190182
#define __put_user_error(x, ptr, err) \
191183
({ \
192-
__put_user_err((x), (ptr), err); \
184+
__put_user_err((x), (ptr), (err)); \
193185
(void)0; \
194186
})
195187

188+
#define __put_user_check(x, ptr, err) \
189+
({ \
190+
__typeof__(*(ptr)) __user *__p = (ptr); \
191+
might_fault(); \
192+
if (access_ok(VERIFY_WRITE, __p, sizeof(*__p))) { \
193+
__put_user_err((x), __p, (err)); \
194+
} else { \
195+
(err) = -EFAULT; \
196+
} \
197+
})
198+
196199
#define __put_user_err(x, ptr, err) \
197200
do { \
198-
__typeof__(*(ptr)) __user *__pu_addr = (ptr); \
199-
__typeof__(*(__pu_addr)) __pu_val = (x); \
200-
__chk_user_ptr(__pu_addr); \
201-
switch (sizeof(*(__pu_addr))) { \
201+
__typeof__(*(ptr)) __pu_val = (x); \
202+
__chk_user_ptr(ptr); \
203+
switch (sizeof(*(ptr))) { \
202204
case 1: \
203-
__put_user_asm("sbi", __pu_val, __pu_addr, (err)); \
205+
__put_user_asm("sbi", __pu_val, (ptr), (err)); \
204206
break; \
205207
case 2: \
206-
__put_user_asm("shi", __pu_val, __pu_addr, (err)); \
208+
__put_user_asm("shi", __pu_val, (ptr), (err)); \
207209
break; \
208210
case 4: \
209-
__put_user_asm("swi", __pu_val, __pu_addr, (err)); \
211+
__put_user_asm("swi", __pu_val, (ptr), (err)); \
210212
break; \
211213
case 8: \
212-
__put_user_asm_dword(__pu_val, __pu_addr, (err)); \
214+
__put_user_asm_dword(__pu_val, (ptr), (err)); \
213215
break; \
214216
default: \
215217
BUILD_BUG(); \

0 commit comments

Comments
 (0)