@@ -166,32 +166,44 @@ do { \
166
166
({ \
167
167
long __pu_err; \
168
168
__typeof__(*(ptr)) __user *__pu_addr = (ptr); \
169
+ __typeof__(*(ptr)) __pu_val = (x); \
170
+ __typeof__(size) __pu_size = (size); \
171
+ \
169
172
if (!is_kernel_addr((unsigned long)__pu_addr)) \
170
173
might_fault(); \
171
- __chk_user_ptr(ptr); \
174
+ __chk_user_ptr(__pu_addr); \
172
175
if (do_allow) \
173
- __put_user_size((x) , __pu_addr, (size) , __pu_err); \
176
+ __put_user_size(__pu_val , __pu_addr, __pu_size , __pu_err); \
174
177
else \
175
- __put_user_size_allowed((x), __pu_addr, (size), __pu_err); \
178
+ __put_user_size_allowed(__pu_val, __pu_addr, __pu_size, __pu_err); \
179
+ \
176
180
__pu_err; \
177
181
})
178
182
179
183
#define __put_user_check (x , ptr , size ) \
180
184
({ \
181
185
long __pu_err = -EFAULT; \
182
186
__typeof__(*(ptr)) __user *__pu_addr = (ptr); \
187
+ __typeof__(*(ptr)) __pu_val = (x); \
188
+ __typeof__(size) __pu_size = (size); \
189
+ \
183
190
might_fault(); \
184
- if (access_ok(__pu_addr, size)) \
185
- __put_user_size((x), __pu_addr, (size), __pu_err); \
191
+ if (access_ok(__pu_addr, __pu_size)) \
192
+ __put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \
193
+ \
186
194
__pu_err; \
187
195
})
188
196
189
197
#define __put_user_nosleep (x , ptr , size ) \
190
198
({ \
191
199
long __pu_err; \
192
200
__typeof__(*(ptr)) __user *__pu_addr = (ptr); \
193
- __chk_user_ptr(ptr); \
194
- __put_user_size((x), __pu_addr, (size), __pu_err); \
201
+ __typeof__(*(ptr)) __pu_val = (x); \
202
+ __typeof__(size) __pu_size = (size); \
203
+ \
204
+ __chk_user_ptr(__pu_addr); \
205
+ __put_user_size(__pu_val, __pu_addr, __pu_size, __pu_err); \
206
+ \
195
207
__pu_err; \
196
208
})
197
209
@@ -283,15 +295,18 @@ do { \
283
295
long __gu_err; \
284
296
__long_type(*(ptr)) __gu_val; \
285
297
__typeof__(*(ptr)) __user *__gu_addr = (ptr); \
286
- __chk_user_ptr(ptr); \
298
+ __typeof__(size) __gu_size = (size); \
299
+ \
300
+ __chk_user_ptr(__gu_addr); \
287
301
if (!is_kernel_addr((unsigned long)__gu_addr)) \
288
302
might_fault(); \
289
303
barrier_nospec(); \
290
304
if (do_allow) \
291
- __get_user_size(__gu_val, __gu_addr, (size) , __gu_err); \
305
+ __get_user_size(__gu_val, __gu_addr, __gu_size , __gu_err); \
292
306
else \
293
- __get_user_size_allowed(__gu_val, __gu_addr, (size) , __gu_err); \
307
+ __get_user_size_allowed(__gu_val, __gu_addr, __gu_size , __gu_err); \
294
308
(x) = (__typeof__(*(ptr)))__gu_val; \
309
+ \
295
310
__gu_err; \
296
311
})
297
312
@@ -300,12 +315,15 @@ do { \
300
315
long __gu_err = -EFAULT; \
301
316
__long_type(*(ptr)) __gu_val = 0; \
302
317
__typeof__(*(ptr)) __user *__gu_addr = (ptr); \
318
+ __typeof__(size) __gu_size = (size); \
319
+ \
303
320
might_fault(); \
304
- if (access_ok(__gu_addr, (size))) { \
321
+ if (access_ok(__gu_addr, __gu_size)) { \
305
322
barrier_nospec(); \
306
- __get_user_size(__gu_val, __gu_addr, (size) , __gu_err); \
323
+ __get_user_size(__gu_val, __gu_addr, __gu_size , __gu_err); \
307
324
} \
308
325
(x) = (__force __typeof__(*(ptr)))__gu_val; \
326
+ \
309
327
__gu_err; \
310
328
})
311
329
@@ -314,10 +332,13 @@ do { \
314
332
long __gu_err; \
315
333
__long_type(*(ptr)) __gu_val; \
316
334
__typeof__(*(ptr)) __user *__gu_addr = (ptr); \
317
- __chk_user_ptr(ptr); \
335
+ __typeof__(size) __gu_size = (size); \
336
+ \
337
+ __chk_user_ptr(__gu_addr); \
318
338
barrier_nospec(); \
319
- __get_user_size(__gu_val, __gu_addr, (size) , __gu_err); \
339
+ __get_user_size(__gu_val, __gu_addr, __gu_size , __gu_err); \
320
340
(x) = (__force __typeof__(*(ptr)))__gu_val; \
341
+ \
321
342
__gu_err; \
322
343
})
323
344
0 commit comments