uaccess.h (301a36fa700f9add6e14f5a95c7573e01578343a) uaccess.h (9e91db6b4abecd58647a5e984d538187f1c2ea09)
1#ifndef __PARISC_UACCESS_H
2#define __PARISC_UACCESS_H
3
4/*
5 * User space memory access functions
6 */
7#include <asm/page.h>
8#include <asm/cache.h>
9#include <asm/errno.h>
10#include <asm-generic/uaccess-unaligned.h>
11
12#include <linux/bug.h>
13#include <linux/string.h>
1#ifndef __PARISC_UACCESS_H
2#define __PARISC_UACCESS_H
3
4/*
5 * User space memory access functions
6 */
7#include <asm/page.h>
8#include <asm/cache.h>
9#include <asm/errno.h>
10#include <asm-generic/uaccess-unaligned.h>
11
12#include <linux/bug.h>
13#include <linux/string.h>
14#include <linux/thread_info.h>
14
15#define VERIFY_READ 0
16#define VERIFY_WRITE 1
17
18#define KERNEL_DS ((mm_segment_t){0})
19#define USER_DS ((mm_segment_t){1})
20
21#define segment_eq(a, b) ((a).seg == (b).seg)

--- 174 unchanged lines hidden (view full) ---

196 */
197#define user_addr_max() (~0UL)
198
199#define strnlen_user lstrnlen_user
200#define strlen_user(str) lstrnlen_user(str, 0x7fffffffL)
201#define clear_user lclear_user
202#define __clear_user lclear_user
203
15
16#define VERIFY_READ 0
17#define VERIFY_WRITE 1
18
19#define KERNEL_DS ((mm_segment_t){0})
20#define USER_DS ((mm_segment_t){1})
21
22#define segment_eq(a, b) ((a).seg == (b).seg)

--- 174 unchanged lines hidden (view full) ---

197 */
198#define user_addr_max() (~0UL)
199
200#define strnlen_user lstrnlen_user
201#define strlen_user(str) lstrnlen_user(str, 0x7fffffffL)
202#define clear_user lclear_user
203#define __clear_user lclear_user
204
204unsigned long copy_to_user(void __user *dst, const void *src, unsigned long len);
205#define __copy_to_user copy_to_user
206unsigned long __copy_from_user(void *dst, const void __user *src, unsigned long len);
207unsigned long copy_in_user(void __user *dst, const void __user *src, unsigned long len);
205unsigned long __must_check __copy_to_user(void __user *dst, const void *src,
206 unsigned long len);
207unsigned long __must_check __copy_from_user(void *dst, const void __user *src,
208 unsigned long len);
209unsigned long copy_in_user(void __user *dst, const void __user *src,
210 unsigned long len);
208#define __copy_in_user copy_in_user
209#define __copy_to_user_inatomic __copy_to_user
210#define __copy_from_user_inatomic __copy_from_user
211
212extern void __compiletime_error("usercopy buffer size is too small")
213__bad_copy_user(void);
214
215static inline void copy_user_overflow(int size, unsigned long count)
216{
217 WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
218}
219
211#define __copy_in_user copy_in_user
212#define __copy_to_user_inatomic __copy_to_user
213#define __copy_from_user_inatomic __copy_from_user
214
215extern void __compiletime_error("usercopy buffer size is too small")
216__bad_copy_user(void);
217
218static inline void copy_user_overflow(int size, unsigned long count)
219{
220 WARN(1, "Buffer overflow detected (%d < %lu)!\n", size, count);
221}
222
220static inline unsigned long __must_check copy_from_user(void *to,
221 const void __user *from,
222 unsigned long n)
223static __always_inline unsigned long __must_check
224copy_from_user(void *to, const void __user *from, unsigned long n)
223{
225{
224 int sz = __compiletime_object_size(to);
225 unsigned long ret = n;
226 int sz = __compiletime_object_size(to);
227 unsigned long ret = n;
226
228
227 if (likely(sz == -1 || sz >= n))
228 ret = __copy_from_user(to, from, n);
229 else if (!__builtin_constant_p(n))
229 if (likely(sz < 0 || sz >= n)) {
230 check_object_size(to, n, false);
231 ret = __copy_from_user(to, from, n);
232 } else if (!__builtin_constant_p(n))
230 copy_user_overflow(sz, n);
231 else
233 copy_user_overflow(sz, n);
234 else
232 __bad_copy_user();
235 __bad_copy_user();
233
234 if (unlikely(ret))
235 memset(to + (n - ret), 0, ret);
236
237 if (unlikely(ret))
238 memset(to + (n - ret), 0, ret);
236 return ret;
239
240 return ret;
237}
238
241}
242
243static __always_inline unsigned long __must_check
244copy_to_user(void __user *to, const void *from, unsigned long n)
245{
246 int sz = __compiletime_object_size(from);
247
248 if (likely(sz < 0 || sz >= n)) {
249 check_object_size(from, n, true);
250 n = __copy_to_user(to, from, n);
251 } else if (!__builtin_constant_p(n))
252 copy_user_overflow(sz, n);
253 else
254 __bad_copy_user();
255
256 return n;
257}
258
239struct pt_regs;
240int fixup_exception(struct pt_regs *regs);
241
242#endif /* __PARISC_UACCESS_H */
259struct pt_regs;
260int fixup_exception(struct pt_regs *regs);
261
262#endif /* __PARISC_UACCESS_H */