summaryrefslogtreecommitdiffstats
path: root/arch/um/include/asm/uaccess.h
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2021-12-15 17:56:12 +0100
committerRichard Weinberger <richard@nod.at>2021-12-22 17:56:56 +0100
commit8bb227ac34c062b466a0d5fd21f060010375880b (patch)
treeaec5b756553198a4b1638eb798e59905c0a2df53 /arch/um/include/asm/uaccess.h
parentce72750f04d68a45ef971c3547fe2d6f9cd4756e (diff)
downloadlinux-stable-8bb227ac34c062b466a0d5fd21f060010375880b.tar.gz
linux-stable-8bb227ac34c062b466a0d5fd21f060010375880b.tar.bz2
linux-stable-8bb227ac34c062b466a0d5fd21f060010375880b.zip
um: remove set_fs
Remove address space overrides using set_fs() for User Mode Linux. Note that just like the existing kernel access case of the uaccess routines the new nofault kernel handlers do not actually have any exception handling. This is probably broken, but not change to the status quo. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/um/include/asm/uaccess.h')
-rw-r--r--arch/um/include/asm/uaccess.h21
1 files changed, 19 insertions, 2 deletions
diff --git a/arch/um/include/asm/uaccess.h b/arch/um/include/asm/uaccess.h
index 191ef36dd543..17d18cfd82a5 100644
--- a/arch/um/include/asm/uaccess.h
+++ b/arch/um/include/asm/uaccess.h
@@ -8,6 +8,7 @@
#define __UM_UACCESS_H
#include <asm/elf.h>
+#include <asm/unaligned.h>
#define __under_task_size(addr, size) \
(((unsigned long) (addr) < TASK_SIZE) && \
@@ -39,8 +40,24 @@ static inline int __access_ok(unsigned long addr, unsigned long size)
{
return __addr_range_nowrap(addr, size) &&
(__under_task_size(addr, size) ||
- __access_ok_vsyscall(addr, size) ||
- uaccess_kernel());
+ __access_ok_vsyscall(addr, size));
}
+/* no pagefaults for kernel addresses in um */
+#define HAVE_GET_KERNEL_NOFAULT 1
+
+#define __get_kernel_nofault(dst, src, type, err_label) \
+do { \
+ *((type *)dst) = get_unaligned((type *)(src)); \
+ if (0) /* make sure the label looks used to the compiler */ \
+ goto err_label; \
+} while (0)
+
+#define __put_kernel_nofault(dst, src, type, err_label) \
+do { \
+ put_unaligned(*((type *)src), (type *)(dst)); \
+ if (0) /* make sure the label looks used to the compiler */ \
+ goto err_label; \
+} while (0)
+
#endif