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 */ |