All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Pitre <nicolas.pitre@linaro.org>
To: linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Cc: Alexander Viro <viro@zeniv.linux.org.uk>,
	David Howells <dhowells@redhat.com>,
	Greg Ungerer <gerg@linux-m68k.org>
Subject: [PATCH v3 11/12] binfmt_flat: add MMU-specific support
Date: Wed, 20 Jul 2016 00:20:23 -0400	[thread overview]
Message-ID: <1468988424-32671-12-git-send-email-nicolas.pitre@linaro.org> (raw)
In-Reply-To: <1468988424-32671-1-git-send-email-nicolas.pitre@linaro.org>

Not much else to do at this point except for the different stack setups.

SuperH and Xtensa could be added to the allowed list if they implement
__put_user_unaligned() and __get_user_unaligned().

Signed-off-by: Nicolas Pitre <nico@linaro.org>
Reviewed-by: Greg Ungerer <gerg@linux-m68k.org>
---
 fs/Kconfig.binfmt |  3 ++-
 fs/binfmt_flat.c  | 16 +++++++++++++---
 2 files changed, 15 insertions(+), 4 deletions(-)

diff --git a/fs/Kconfig.binfmt b/fs/Kconfig.binfmt
index 72c03354c1..4c09d93d95 100644
--- a/fs/Kconfig.binfmt
+++ b/fs/Kconfig.binfmt
@@ -89,7 +89,8 @@ config BINFMT_SCRIPT
 
 config BINFMT_FLAT
 	bool "Kernel support for flat binaries"
-	depends on !MMU && (!FRV || BROKEN)
+	depends on !MMU || ARM || M68K
+	depends on !FRV || BROKEN
 	help
 	  Support uClinux FLAT format binaries.
 
diff --git a/fs/binfmt_flat.c b/fs/binfmt_flat.c
index fef94aaa36..d04188267a 100644
--- a/fs/binfmt_flat.c
+++ b/fs/binfmt_flat.c
@@ -541,7 +541,7 @@ static int load_flat_file(struct linux_binprm * bprm,
 	 * case,  and then the fully copied to RAM case which lumps
 	 * it all together.
 	 */
-	if ((flags & (FLAT_FLAG_RAM|FLAT_FLAG_GZIP)) == 0) {
+	if (!IS_ENABLED(CONFIG_MMU) && !(flags & (FLAT_FLAG_RAM|FLAT_FLAG_GZIP))) {
 		/*
 		 * this should give us a ROM ptr,  but if it doesn't we don't
 		 * really care
@@ -682,7 +682,9 @@ static int load_flat_file(struct linux_binprm * bprm,
 		 */
 		current->mm->start_brk = datapos + data_len + bss_len;
 		current->mm->brk = (current->mm->start_brk + 3) & ~3;
+#ifndef CONFIG_MMU
 		current->mm->context.end_brk = memp + memp_size - stack_len;
+#endif
 	}
 
 	if (flags & FLAT_FLAG_KTRACE) {
@@ -873,7 +875,7 @@ static int load_flat_binary(struct linux_binprm * bprm)
 {
 	struct lib_info libinfo;
 	struct pt_regs *regs = current_pt_regs();
-	unsigned long stack_len;
+	unsigned long stack_len = 0;
 	unsigned long start_addr;
 	int res;
 	int i, j;
@@ -887,7 +889,9 @@ static int load_flat_binary(struct linux_binprm * bprm)
 	 * pedantic and include space for the argv/envp array as it may have
 	 * a lot of entries.
 	 */
-	stack_len = PAGE_SIZE * MAX_ARG_PAGES - bprm->p;  /* the strings */
+#ifndef CONFIG_MMU
+	stack_len += PAGE_SIZE * MAX_ARG_PAGES - bprm->p; /* the strings */
+#endif
 	stack_len += (bprm->argc + 1) * sizeof(char *);   /* the argv array */
 	stack_len += (bprm->envc + 1) * sizeof(char *);   /* the envp array */
 	stack_len = ALIGN(stack_len, FLAT_STACK_ALIGN);
@@ -915,6 +919,11 @@ static int load_flat_binary(struct linux_binprm * bprm)
 
 	set_binfmt(&flat_format);
 
+#ifdef CONFIG_MMU
+	res = setup_arg_pages(bprm, STACK_TOP, EXSTACK_DEFAULT);
+	if (!res)
+		res = create_flat_tables(bprm, bprm->p);
+#else
 	/* Stash our initial stack pointer into the mm structure */
 	current->mm->start_stack =
 		((current->mm->context.end_brk + stack_len + 3) & ~3) - 4;
@@ -924,6 +933,7 @@ static int load_flat_binary(struct linux_binprm * bprm)
 	res = transfer_args_to_stack(bprm, &current->mm->start_stack);
 	if (!res)
 		res = create_flat_tables(bprm, current->mm->start_stack);
+#endif
 	if (res)
 		return res;
 
-- 
2.7.4

  parent reply	other threads:[~2016-07-20  4:21 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-20  4:20 [PATCH v3 00/12] allow BFLT executables on systems with a MMU Nicolas Pitre
2016-07-20  4:20 ` [PATCH v3 01/12] binfmt_flat: assorted cleanups Nicolas Pitre
2016-07-20  4:20 ` [PATCH v3 02/12] binfmt_flat: convert printk invocations to their modern form Nicolas Pitre
2016-07-20  4:30   ` Joe Perches
2016-07-20  4:30     ` Joe Perches
2016-07-20  5:05     ` Nicolas Pitre
2016-07-20  5:05       ` Nicolas Pitre
2016-07-20  4:20 ` [PATCH v3 03/12] binfmt_flat: prevent kernel dammage from corrupted executable headers Nicolas Pitre
2016-07-20  4:20 ` [PATCH v3 04/12] elf_fdpic_transfer_args_to_stack(): make it generic Nicolas Pitre
2016-07-20  4:20 ` [PATCH v3 05/12] binfmt_flat: use generic transfer_args_to_stack() Nicolas Pitre
2016-07-20  4:20 ` [PATCH v3 06/12] binfmt_flat: clean up create_flat_tables() and stack accesses Nicolas Pitre
2016-07-20  4:20 ` [PATCH v3 07/12] binfmt_flat: use proper user space accessors with relocs processing code Nicolas Pitre
2016-07-20  4:20 ` [PATCH v3 08/12] binfmt_flat: use proper user space accessors with old relocs code Nicolas Pitre
2016-07-20  4:20 ` [PATCH v3 09/12] binfmt_flat: use clear_user() rather than memset() to clear .bss Nicolas Pitre
2016-07-20  7:15   ` Greg Ungerer
2016-07-20  4:20 ` [PATCH v3 10/12] binfmt_flat: update libraries' data segment pointer with userspace accessors Nicolas Pitre
2016-07-20  4:20 ` Nicolas Pitre [this message]
2016-07-20  4:20 ` [PATCH v3 12/12] binfmt_flat: allow compressed flat binary format to work on MMU systems Nicolas Pitre

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1468988424-32671-12-git-send-email-nicolas.pitre@linaro.org \
    --to=nicolas.pitre@linaro.org \
    --cc=dhowells@redhat.com \
    --cc=gerg@linux-m68k.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.