summaryrefslogtreecommitdiffstats
path: root/include/asm-generic
diff options
context:
space:
mode:
authorChristoph Hellwig2019-06-13 09:08:59 +0200
committerGreg Ungerer2019-06-24 01:16:47 +0200
commit7a8998c9d830b59626e049a827678ba444fcf8e2 (patch)
treee49c18fba9af2e182f1675ebb8025dcbb1277da6 /include/asm-generic
parentbinfmt_flat: make support for old format binaries optional (diff)
downloadkernel-qcow2-linux-7a8998c9d830b59626e049a827678ba444fcf8e2.tar.gz
kernel-qcow2-linux-7a8998c9d830b59626e049a827678ba444fcf8e2.tar.xz
kernel-qcow2-linux-7a8998c9d830b59626e049a827678ba444fcf8e2.zip
binfmt_flat: provide an asm-generic/flat.h
This file implements the flat get/put reloc helpers for architectures that do not need to overload the relocs by simply using get_user/put_user. Note that many nommu architectures currently use {get,put}_unaligned, which looks a little bogus and should probably later be switched over to this version as well. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Vladimir Murzin <vladimir.murzin@arm.com> Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
Diffstat (limited to 'include/asm-generic')
-rw-r--r--include/asm-generic/flat.h26
1 files changed, 26 insertions, 0 deletions
diff --git a/include/asm-generic/flat.h b/include/asm-generic/flat.h
new file mode 100644
index 000000000000..fcd2b45c0735
--- /dev/null
+++ b/include/asm-generic/flat.h
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef _ASM_GENERIC_FLAT_H
+#define _ASM_GENERIC_FLAT_H
+
+#include <linux/uaccess.h>
+
+static inline int flat_get_addr_from_rp(u32 __user *rp, u32 relval, u32 flags,
+ u32 *addr, u32 *persistent)
+{
+#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ return copy_from_user(addr, rp, 4) ? -EFAULT : 0;
+#else
+ return get_user(*addr, rp);
+#endif
+}
+
+static inline int flat_put_addr_at_rp(u32 __user *rp, u32 addr, u32 rel)
+{
+#ifndef CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS
+ return copy_to_user(rp, &addr, 4) ? -EFAULT : 0;
+#else
+ return put_user(addr, rp);
+#endif
+}
+
+#endif /* _ASM_GENERIC_FLAT_H */