]>
Commit | Line | Data |
---|---|---|
1da177e4 LT |
1 | /* |
2 | * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) | |
f8d65d27 | 3 | * Copyright (C) 2015 Richard Weinberger (richard@nod.at) |
1da177e4 LT |
4 | * Licensed under the GPL |
5 | */ | |
6 | ||
7 | #ifndef __UM_UACCESS_H | |
8 | #define __UM_UACCESS_H | |
9 | ||
fced95ca | 10 | #include <asm/elf.h> |
1da177e4 | 11 | |
fced95ca AV |
12 | #define __under_task_size(addr, size) \ |
13 | (((unsigned long) (addr) < TASK_SIZE) && \ | |
14 | (((unsigned long) (addr) + (size)) < TASK_SIZE)) | |
15 | ||
f8d65d27 RW |
16 | #define __access_ok_vsyscall(addr, size) \ |
17 | (((unsigned long) (addr) >= FIXADDR_USER_START) && \ | |
fced95ca AV |
18 | ((unsigned long) (addr) + (size) <= FIXADDR_USER_END) && \ |
19 | ((unsigned long) (addr) + (size) >= (unsigned long)(addr))) | |
20 | ||
21 | #define __addr_range_nowrap(addr, size) \ | |
22 | ((unsigned long) (addr) <= ((unsigned long) (addr) + (size))) | |
23 | ||
a668ce3a AV |
24 | extern unsigned long raw_copy_from_user(void *to, const void __user *from, unsigned long n); |
25 | extern unsigned long raw_copy_to_user(void __user *to, const void *from, unsigned long n); | |
f8d65d27 RW |
26 | extern long __strncpy_from_user(char *dst, const char __user *src, long count); |
27 | extern long __strnlen_user(const void __user *str, long len); | |
28 | extern unsigned long __clear_user(void __user *mem, unsigned long len); | |
29 | static inline int __access_ok(unsigned long addr, unsigned long size); | |
30 | ||
31 | /* Teach asm-generic/uaccess.h that we have C functions for these. */ | |
32 | #define __access_ok __access_ok | |
33 | #define __clear_user __clear_user | |
f8d65d27 RW |
34 | #define __strnlen_user __strnlen_user |
35 | #define __strncpy_from_user __strncpy_from_user | |
a668ce3a AV |
36 | #define INLINE_COPY_FROM_USER |
37 | #define INLINE_COPY_TO_USER | |
1da177e4 | 38 | |
f8d65d27 | 39 | #include <asm-generic/uaccess.h> |
1da177e4 | 40 | |
f8d65d27 | 41 | static inline int __access_ok(unsigned long addr, unsigned long size) |
1da177e4 | 42 | { |
f8d65d27 RW |
43 | return __addr_range_nowrap(addr, size) && |
44 | (__under_task_size(addr, size) || | |
45 | __access_ok_vsyscall(addr, size) || | |
db68ce10 | 46 | uaccess_kernel()); |
f8d65d27 | 47 | } |
1da177e4 LT |
48 | |
49 | #endif |