hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/arch/nds32/include/asm/uaccess.h
....@@ -1,4 +1,4 @@
1
-// SPDX-License-Identifier: GPL-2.0
1
+/* SPDX-License-Identifier: GPL-2.0 */
22 // Copyright (C) 2005-2017 Andes Technology Corporation
33
44 #ifndef _ASMANDES_UACCESS_H
....@@ -11,10 +11,6 @@
1111 #include <asm/errno.h>
1212 #include <asm/memory.h>
1313 #include <asm/types.h>
14
-#include <linux/mm.h>
15
-
16
-#define VERIFY_READ 0
17
-#define VERIFY_WRITE 1
1814
1915 #define __asmeq(x, y) ".ifnc " x "," y " ; .err ; .endif\n\t"
2016
....@@ -40,7 +36,6 @@
4036 #define KERNEL_DS ((mm_segment_t) { ~0UL })
4137 #define USER_DS ((mm_segment_t) {TASK_SIZE - 1})
4238
43
-#define get_ds() (KERNEL_DS)
4439 #define get_fs() (current_thread_info()->addr_limit)
4540 #define user_addr_max get_fs
4641
....@@ -49,11 +44,11 @@
4944 current_thread_info()->addr_limit = fs;
5045 }
5146
52
-#define segment_eq(a, b) ((a) == (b))
47
+#define uaccess_kernel() (get_fs() == KERNEL_DS)
5348
5449 #define __range_ok(addr, size) (size <= get_fs() && addr <= (get_fs() -size))
5550
56
-#define access_ok(type, addr, size) \
51
+#define access_ok(addr, size) \
5752 __range_ok((unsigned long)addr, (unsigned long)size)
5853 /*
5954 * Single-value transfer routines. They automatically use the right
....@@ -75,9 +70,7 @@
7570 * versions are void (ie, don't return a value as such).
7671 */
7772
78
-#define get_user __get_user \
79
-
80
-#define __get_user(x, ptr) \
73
+#define get_user(x, ptr) \
8174 ({ \
8275 long __gu_err = 0; \
8376 __get_user_check((x), (ptr), __gu_err); \
....@@ -90,11 +83,19 @@
9083 (void)0; \
9184 })
9285
86
+#define __get_user(x, ptr) \
87
+({ \
88
+ long __gu_err = 0; \
89
+ const __typeof__(*(ptr)) __user *__p = (ptr); \
90
+ __get_user_err((x), __p, (__gu_err)); \
91
+ __gu_err; \
92
+})
93
+
9394 #define __get_user_check(x, ptr, err) \
9495 ({ \
9596 const __typeof__(*(ptr)) __user *__p = (ptr); \
9697 might_fault(); \
97
- if (access_ok(VERIFY_READ, __p, sizeof(*__p))) { \
98
+ if (access_ok(__p, sizeof(*__p))) { \
9899 __get_user_err((x), __p, (err)); \
99100 } else { \
100101 (x) = 0; (err) = -EFAULT; \
....@@ -170,12 +171,18 @@
170171 : "r"(addr), "i"(-EFAULT) \
171172 : "cc")
172173
173
-#define put_user __put_user \
174
+#define put_user(x, ptr) \
175
+({ \
176
+ long __pu_err = 0; \
177
+ __put_user_check((x), (ptr), __pu_err); \
178
+ __pu_err; \
179
+})
174180
175181 #define __put_user(x, ptr) \
176182 ({ \
177183 long __pu_err = 0; \
178
- __put_user_err((x), (ptr), __pu_err); \
184
+ __typeof__(*(ptr)) __user *__p = (ptr); \
185
+ __put_user_err((x), __p, __pu_err); \
179186 __pu_err; \
180187 })
181188
....@@ -189,7 +196,7 @@
189196 ({ \
190197 __typeof__(*(ptr)) __user *__p = (ptr); \
191198 might_fault(); \
192
- if (access_ok(VERIFY_WRITE, __p, sizeof(*__p))) { \
199
+ if (access_ok(__p, sizeof(*__p))) { \
193200 __put_user_err((x), __p, (err)); \
194201 } else { \
195202 (err) = -EFAULT; \
....@@ -279,7 +286,7 @@
279286 #define INLINE_COPY_TO_USER
280287 static inline unsigned long clear_user(void __user * to, unsigned long n)
281288 {
282
- if (access_ok(VERIFY_WRITE, to, n))
289
+ if (access_ok(to, n))
283290 n = __arch_clear_user(to, n);
284291 return n;
285292 }