Merge tag 'asm-generic-5.18' of git://git.kernel.org/pub/scm/linux/kernel/git/arnd...
[sfrench/cifs-2.6.git] / include / linux / uaccess.h
index bca27b4e5eb2d587037f2152137324f7bff99287..546179418ffa20b3f24934682623bc9445945f20 100644 (file)
 
 #include <asm/uaccess.h>
 
-#ifdef CONFIG_SET_FS
-/*
- * Force the uaccess routines to be wired up for actual userspace access,
- * overriding any possible set_fs(KERNEL_DS) still lingering around.  Undone
- * using force_uaccess_end below.
- */
-static inline mm_segment_t force_uaccess_begin(void)
-{
-       mm_segment_t fs = get_fs();
-
-       set_fs(USER_DS);
-       return fs;
-}
-
-static inline void force_uaccess_end(mm_segment_t oldfs)
-{
-       set_fs(oldfs);
-}
-#else /* CONFIG_SET_FS */
-typedef struct {
-       /* empty dummy */
-} mm_segment_t;
-
-#ifndef TASK_SIZE_MAX
-#define TASK_SIZE_MAX                  TASK_SIZE
-#endif
-
-#define uaccess_kernel()               (false)
-#define user_addr_max()                        (TASK_SIZE_MAX)
-
-static inline mm_segment_t force_uaccess_begin(void)
-{
-       return (mm_segment_t) { };
-}
-
-static inline void force_uaccess_end(mm_segment_t oldfs)
-{
-}
-#endif /* CONFIG_SET_FS */
-
 /*
  * Architectures should provide two primitives (raw_copy_{to,from}_user())
  * and get rid of their private instances of copy_{to,from}_user() and
@@ -368,6 +328,25 @@ long strncpy_from_user_nofault(char *dst, const void __user *unsafe_addr,
                long count);
 long strnlen_user_nofault(const void __user *unsafe_addr, long count);
 
+#ifndef __get_kernel_nofault
+#define __get_kernel_nofault(dst, src, type, label)    \
+do {                                                   \
+       type __user *p = (type __force __user *)(src);  \
+       type data;                                      \
+       if (__get_user(data, p))                        \
+               goto label;                             \
+       *(type *)dst = data;                            \
+} while (0)
+
+#define __put_kernel_nofault(dst, src, type, label)    \
+do {                                                   \
+       type __user *p = (type __force __user *)(dst);  \
+       type data = *(type *)src;                       \
+       if (__put_user(data, p))                        \
+               goto label;                             \
+} while (0)
+#endif
+
 /**
  * get_kernel_nofault(): safely attempt to read from a location
  * @val: read into this variable