46 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef UACCESS_H3#define UACCESS_H4 5#include <linux/compiler.h>6 7extern void *__user_addr_min, *__user_addr_max;8 9#define put_user(x, ptr) \10({ \11 typeof(ptr) __pu_ptr = (ptr); \12 __chk_user_ptr(__pu_ptr); \13 WRITE_ONCE(*(__pu_ptr), x); \14 0; \15})16 17#define get_user(x, ptr) \18({ \19 typeof(ptr) __pu_ptr = (ptr); \20 __chk_user_ptr(__pu_ptr); \21 x = READ_ONCE(*(__pu_ptr)); \22 0; \23})24 25static void volatile_memcpy(volatile char *to, const volatile char *from, 26 unsigned long n)27{28 while (n--)29 *(to++) = *(from++);30}31 32static inline int copy_from_user(void *to, const void __user volatile *from,33 unsigned long n)34{35 volatile_memcpy(to, from, n);36 return 0;37}38 39static inline int copy_to_user(void __user volatile *to, const void *from,40 unsigned long n)41{42 volatile_memcpy(to, from, n);43 return 0;44}45#endif /* UACCESS_H */46