summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Pitre <nicolas.pitre@linaro.org>2016-08-05 06:03:41 +0100
committerRussell King <rmk+kernel@armlinux.org.uk>2016-08-12 16:47:05 +0100
commitd782e426b835bd2e79d868eb4af8510ed79e0aee (patch)
treefc96553e852220f81d88475037e7f907821c2dab
parent55604b7ab1b5b8f560721e69b1ac059bd8d2078e (diff)
downloadlinux-0-day-d782e426b835bd2e79d868eb4af8510ed79e0aee.tar.gz
linux-0-day-d782e426b835bd2e79d868eb4af8510ed79e0aee.tar.xz
ARM: 8594/1: enable binfmt_flat on systems with an MMU
Now that the generic changes are in place, this can be enabled on ARM with the use of proper user space accessors in the flat_get_addr_from_rp() and flat_put_addr_at_rp() handlers as rp actually holds a user space address. Signed-off-by: Nicolas Pitre <nico@linaro.org> Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/include/asm/flat.h5
-rw-r--r--fs/Kconfig.binfmt2
2 files changed, 4 insertions, 3 deletions
diff --git a/arch/arm/include/asm/flat.h b/arch/arm/include/asm/flat.h
index e847d23351eda..acf1d14b89a65 100644
--- a/arch/arm/include/asm/flat.h
+++ b/arch/arm/include/asm/flat.h
@@ -8,8 +8,9 @@
#define flat_argvp_envp_on_stack() 1
#define flat_old_ram_flag(flags) (flags)
#define flat_reloc_valid(reloc, size) ((reloc) <= (size))
-#define flat_get_addr_from_rp(rp, relval, flags, persistent) ((void)persistent,get_unaligned(rp))
-#define flat_put_addr_at_rp(rp, val, relval) put_unaligned(val,rp)
+#define flat_get_addr_from_rp(rp, relval, flags, persistent) \
+ ({ unsigned long __val; __get_user_unaligned(__val, rp); __val; })
+#define flat_put_addr_at_rp(rp, val, relval) __put_user_unaligned(val, rp)
#define flat_get_relocate_addr(rel) (rel)
#define flat_set_persistent(relval, p) 0
diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt
index c7efddf6e0380..4c09d93d95694 100644
--- a/fs/Kconfig.binfmt
+++ b/fs/Kconfig.binfmt
@@ -89,7 +89,7 @@ config BINFMT_SCRIPT
config BINFMT_FLAT
bool "Kernel support for flat binaries"
- depends on !MMU || M68K
+ depends on !MMU || ARM || M68K
depends on !FRV || BROKEN
help
Support uClinux FLAT format binaries.