public inbox for linux-m68k@lists.linux-m68k.org
 help / color / mirror / Atom feed
* [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k
       [not found]               ` <b40d1377-51d5-4ba3-ab3f-b40626c229ad@physik.fu-berlin.de>
@ 2022-03-09 20:03                 ` Eric W. Biederman
  2022-03-09 20:37                   ` Linus Torvalds
                                     ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Eric W. Biederman @ 2022-03-09 20:03 UTC (permalink / raw)
  To: Kees Cook
  Cc: John Paul Adrian Glaubitz, Borislav Petkov, Geert Uytterhoeven,
	Theodore Ts'o, X86 ML, Arnd Bergmann, LKML, Matt Turner,
	Måns Rullgård, Michael Cree, linux-arch,
	Richard Henderson, Ivan Kokshaysky, Geert Uytterhoeven,
	linux-m68k, Linus Torvalds


There has been repeated discussion on removing a.out support, the most
recent was[1].  Having read through a bunch of the discussion it looks
like no one has see any reason why we need to keep a.out support.

The m68k maintainer has even come out in favor of removing a.out
support[2].

At a practical level with only two rarely used architectures building
a.out support, it gets increasingly hard to test and to care about.
Which means the code will almost certainly bit-rot.

Let's see if anyone cares about a.out support on the last two
architectures that build it, by disabling the build of the support in
Kconfig.  If anyone cares, this can be easily reverted, and we can then
have a discussion about what it is going to take to support a.out
binaries in the long term.

Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Matt Turner <mattst88@gmail.com>
Cc: linux-alpha@vger.kernel.org
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-m68k@lists.linux-m68k.org
[1] https://lkml.kernel.org/r/20220113160115.5375-1-bp@alien8.de
[2] https://lkml.kernel.org/r/CAMuHMdUbTNNr16YY1TFe=-uRLjg6yGzgw_RqtAFpyhnOMM5Pvw@mail.gmail.com
Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
---

Kees do you think you could add this to your execve branch?

I think this should be a complimentary patch to Borislav Petkov's patch
at the top of this tread to remove a.out support on x86.

 arch/alpha/Kconfig | 1 -
 arch/m68k/Kconfig  | 1 -
 2 files changed, 2 deletions(-)

diff --git a/arch/alpha/Kconfig b/arch/alpha/Kconfig
index 4e87783c90ad..14c97acea351 100644
--- a/arch/alpha/Kconfig
+++ b/arch/alpha/Kconfig
@@ -12,7 +12,6 @@ config ALPHA
 	select FORCE_PCI if !ALPHA_JENSEN
 	select PCI_DOMAINS if PCI
 	select PCI_SYSCALL if PCI
-	select HAVE_AOUT
 	select HAVE_ASM_MODVERSIONS
 	select HAVE_PCSPKR_PLATFORM
 	select HAVE_PERF_EVENTS
diff --git a/arch/m68k/Kconfig b/arch/m68k/Kconfig
index 936e1803c7c7..268b3860d40d 100644
--- a/arch/m68k/Kconfig
+++ b/arch/m68k/Kconfig
@@ -17,7 +17,6 @@ config M68K
 	select GENERIC_CPU_DEVICES
 	select GENERIC_IOMAP
 	select GENERIC_IRQ_SHOW
-	select HAVE_AOUT if MMU
 	select HAVE_ASM_MODVERSIONS
 	select HAVE_DEBUG_BUGVERBOSE
 	select HAVE_EFFICIENT_UNALIGNED_ACCESS if !CPU_HAS_NO_UNALIGNED
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k
  2022-03-09 20:03                 ` [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k Eric W. Biederman
@ 2022-03-09 20:37                   ` Linus Torvalds
  2022-03-09 22:02                     ` Kees Cook
  2022-03-09 22:04                   ` Kees Cook
  2022-03-10  8:09                   ` [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k Geert Uytterhoeven
  2 siblings, 1 reply; 9+ messages in thread
From: Linus Torvalds @ 2022-03-09 20:37 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Kees Cook, John Paul Adrian Glaubitz, Borislav Petkov,
	Geert Uytterhoeven, Theodore Ts'o, X86 ML, Arnd Bergmann,
	LKML, Matt Turner, Måns Rullgård, Michael Cree,
	linux-arch, Richard Henderson, Ivan Kokshaysky, linux-m68k

On Wed, Mar 9, 2022 at 12:04 PM Eric W. Biederman <ebiederm@xmission.com> wrote:
>
> Let's see if anyone cares about a.out support on the last two
> architectures that build it, by disabling the build of the support in
> Kconfig.

Oh, I'm pretty sure we can't do this.

a.out on alpha is afaik still very much alive - well, as alive as
anything alpha is - although it's called "ECOFF".

It's the native Tru64 (aka "DEC OSF/1", aka "Digital UNIX") format, so
it's more than some old legacy Linux thing.

We still call it "a.out", but the history is that a.out with some
extensions became COFF, which then became ECOFF, so our a.out code
really covers the whole gamut.

Yeah, we don't actually parse any of the extensions that make COFF
what it is, or ECOFF what _it_ is, but the a.out loader ends up
working "well enough" for simple binaries by using ugly code like

  #define N_TXTOFF(x) \
    ((long) N_MAGIC(x) == ZMAGIC ? 0 : \
     (sizeof(struct exec) + (x).fh.f_nscns*SCNHSZ + SCNROUND - 1) &
~(SCNROUND - 1))

which jumps over all the section headers.

But sure, it would be interesting to know if any alpha people care - I
just have this suspicion that we can't drop it that easily because of
the non-Linux legacy.

                   Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k
  2022-03-09 20:37                   ` Linus Torvalds
@ 2022-03-09 22:02                     ` Kees Cook
  0 siblings, 0 replies; 9+ messages in thread
From: Kees Cook @ 2022-03-09 22:02 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Eric W. Biederman, John Paul Adrian Glaubitz, Borislav Petkov,
	Geert Uytterhoeven, Theodore Ts'o, X86 ML, Arnd Bergmann,
	LKML, Matt Turner, Måns Rullgård, Michael Cree,
	linux-arch, Richard Henderson, Ivan Kokshaysky, linux-m68k

On Wed, Mar 09, 2022 at 12:37:54PM -0800, Linus Torvalds wrote:
> On Wed, Mar 9, 2022 at 12:04 PM Eric W. Biederman <ebiederm@xmission.com> wrote:
> >
> > Let's see if anyone cares about a.out support on the last two
> > architectures that build it, by disabling the build of the support in
> > Kconfig.
> [...]
> But sure, it would be interesting to know if any alpha people care - I
> just have this suspicion that we can't drop it that easily because of
> the non-Linux legacy.

It looks like the only distro supporting Alpha is Gentoo. I pulled
down the installation media, and everything is ELF except for firmware
COFF files:

$ find . -type f | xargs file | grep -Ei ':.*(out|coff)'
./lib/firmware/meson/vdec/g12a_hevc_mmu.bin: MIPSEB MIPS-III ECOFF executable not stripped - version 0.0
./lib/firmware/meson/vdec/g12a_vp9.bin: MIPSEB MIPS-III ECOFF executable not stripped - version 0.0
./lib/firmware/meson/vdec/gxl_hevc_mmu.bin: MIPSEB MIPS-III ECOFF executable not stripped - version 0.0
./lib/firmware/meson/vdec/gxl_vp9.bin: MIPSEB MIPS-III ECOFF executable not stripped - version 0.0
./lib/firmware/meson/vdec/sm1_hevc_mmu.bin: MIPSEB MIPS-III ECOFF executable not stripped - version 0.0
./lib/firmware/meson/vdec/sm1_vp9_mmu.bin: MIPSEB MIPS-III ECOFF executable not stripped - version 0.0
./lib/firmware/qca/crbtfw32.tlv: mc68k COFF object not stripped

So, since it's an easy revert, sure. Let's do it.

-- 
Kees Cook

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k
  2022-03-09 20:03                 ` [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k Eric W. Biederman
  2022-03-09 20:37                   ` Linus Torvalds
@ 2022-03-09 22:04                   ` Kees Cook
  2022-03-10 23:29                     ` [PATCH] x86: Remove a.out support Eric W. Biederman
  2022-03-10  8:09                   ` [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k Geert Uytterhoeven
  2 siblings, 1 reply; 9+ messages in thread
From: Kees Cook @ 2022-03-09 22:04 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Kees Cook, LKML, Måns Rullgård, Theodore Ts'o,
	John Paul Adrian Glaubitz, Michael Cree, linux-arch,
	Richard Henderson, linux-m68k, Borislav Petkov, Arnd Bergmann,
	Ivan Kokshaysky, Geert Uytterhoeven, X86 ML, Linus Torvalds,
	Matt Turner

On Wed, 09 Mar 2022 14:03:42 -0600, Eric W. Biederman wrote:
> There has been repeated discussion on removing a.out support, the most
> recent was[1].  Having read through a bunch of the discussion it looks
> like no one has see any reason why we need to keep a.out support.
> 
> The m68k maintainer has even come out in favor of removing a.out
> support[2].
> 
> [...]

Applied to for-next/execve, thanks!

[1/1] a.out: Stop building a.out/osf1 support on alpha and m68k
      https://git.kernel.org/kees/c/f451569b9da8

-- 
Kees Cook


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k
  2022-03-09 20:03                 ` [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k Eric W. Biederman
  2022-03-09 20:37                   ` Linus Torvalds
  2022-03-09 22:04                   ` Kees Cook
@ 2022-03-10  8:09                   ` Geert Uytterhoeven
  2 siblings, 0 replies; 9+ messages in thread
From: Geert Uytterhoeven @ 2022-03-10  8:09 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Kees Cook, John Paul Adrian Glaubitz, Borislav Petkov,
	Theodore Ts'o, X86 ML, Arnd Bergmann, LKML, Matt Turner,
	Måns Rullgård, Michael Cree, Linux-Arch,
	Richard Henderson, Ivan Kokshaysky, linux-m68k, Linus Torvalds

On Wed, Mar 9, 2022 at 9:04 PM Eric W. Biederman <ebiederm@xmission.com> wrote:
> There has been repeated discussion on removing a.out support, the most
> recent was[1].  Having read through a bunch of the discussion it looks
> like no one has see any reason why we need to keep a.out support.
>
> The m68k maintainer has even come out in favor of removing a.out
> support[2].
>
> At a practical level with only two rarely used architectures building
> a.out support, it gets increasingly hard to test and to care about.
> Which means the code will almost certainly bit-rot.
>
> Let's see if anyone cares about a.out support on the last two
> architectures that build it, by disabling the build of the support in
> Kconfig.  If anyone cares, this can be easily reverted, and we can then
> have a discussion about what it is going to take to support a.out
> binaries in the long term.
>
> Cc: Richard Henderson <rth@twiddle.net>
> Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
> Cc: Matt Turner <mattst88@gmail.com>
> Cc: linux-alpha@vger.kernel.org
> Cc: Geert Uytterhoeven <geert@linux-m68k.org>
> Cc: linux-m68k@lists.linux-m68k.org
> [1] https://lkml.kernel.org/r/20220113160115.5375-1-bp@alien8.de
> [2] https://lkml.kernel.org/r/CAMuHMdUbTNNr16YY1TFe=-uRLjg6yGzgw_RqtAFpyhnOMM5Pvw@mail.gmail.com
> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>

>  arch/m68k/Kconfig  | 1 -

Acked-by: Geert Uytterhoeven <geert@linux-m68k.org>

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH] x86: Remove a.out support
  2022-03-09 22:04                   ` Kees Cook
@ 2022-03-10 23:29                     ` Eric W. Biederman
  2022-03-10 23:35                       ` Linus Torvalds
  2022-03-11 10:03                       ` Borislav Petkov
  0 siblings, 2 replies; 9+ messages in thread
From: Eric W. Biederman @ 2022-03-10 23:29 UTC (permalink / raw)
  To: Kees Cook
  Cc: LKML, Måns Rullgård, Theodore Ts'o,
	John Paul Adrian Glaubitz, Michael Cree, linux-arch,
	Richard Henderson, linux-m68k, Borislav Petkov, Arnd Bergmann,
	Ivan Kokshaysky, Geert Uytterhoeven, X86 ML, Linus Torvalds,
	Matt Turner


From: Borislav Petkov <bp@suse.de>
Date: Thu, 13 Jan 2022 17:01:15 +0100
Subject: [PATCH] x86: Remove a.out support

Commit

  eac616557050 ("x86: Deprecate a.out support")

deprecated a.out support with the promise to remove it a couple of
releases later. That commit landed in v5.1.

Now it is more than a couple of releases later, no one has complained so
remove it.

Signed-off-by: Borislav Petkov <bp@suse.de>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://lkml.kernel.org/r/20220113160115.5375-1-bp@alien8.de
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
---

Kees can you pick this one up in for-next/execve as well?

It still applies cleanly and the actual patch seems to have gotten lost
in the conversation about what more we could do.

Thanks,
Eric


 arch/x86/Kconfig          |   7 -
 arch/x86/ia32/Makefile    |   2 -
 arch/x86/ia32/ia32_aout.c | 325 --------------------------------------
 3 files changed, 334 deletions(-)
 delete mode 100644 arch/x86/ia32/ia32_aout.c

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 9f5bd41bf660..b6563d6681c1 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -2827,13 +2827,6 @@ config IA32_EMULATION
 	  64-bit kernel. You should likely turn this on, unless you're
 	  100% sure that you don't have any 32-bit programs left.
 
-config IA32_AOUT
-	tristate "IA32 a.out support"
-	depends on IA32_EMULATION
-	depends on BROKEN
-	help
-	  Support old a.out binaries in the 32bit emulation.
-
 config X86_X32
 	bool "x32 ABI for 64-bit mode"
 	depends on X86_64
diff --git a/arch/x86/ia32/Makefile b/arch/x86/ia32/Makefile
index 8e4d0391ff6c..e481056698de 100644
--- a/arch/x86/ia32/Makefile
+++ b/arch/x86/ia32/Makefile
@@ -5,7 +5,5 @@
 
 obj-$(CONFIG_IA32_EMULATION) := ia32_signal.o
 
-obj-$(CONFIG_IA32_AOUT) += ia32_aout.o
-
 audit-class-$(CONFIG_AUDIT) := audit.o
 obj-$(CONFIG_IA32_EMULATION) += $(audit-class-y)
diff --git a/arch/x86/ia32/ia32_aout.c b/arch/x86/ia32/ia32_aout.c
deleted file mode 100644
index 9bd15241fadb..000000000000
--- a/arch/x86/ia32/ia32_aout.c
+++ /dev/null
@@ -1,325 +0,0 @@
-// SPDX-License-Identifier: GPL-2.0-only
-/*
- *  a.out loader for x86-64
- *
- *  Copyright (C) 1991, 1992, 1996  Linus Torvalds
- *  Hacked together by Andi Kleen
- */
-
-#include <linux/module.h>
-
-#include <linux/time.h>
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/mman.h>
-#include <linux/a.out.h>
-#include <linux/errno.h>
-#include <linux/signal.h>
-#include <linux/string.h>
-#include <linux/fs.h>
-#include <linux/file.h>
-#include <linux/stat.h>
-#include <linux/fcntl.h>
-#include <linux/ptrace.h>
-#include <linux/user.h>
-#include <linux/binfmts.h>
-#include <linux/personality.h>
-#include <linux/init.h>
-#include <linux/jiffies.h>
-#include <linux/perf_event.h>
-#include <linux/sched/task_stack.h>
-
-#include <linux/uaccess.h>
-#include <asm/cacheflush.h>
-#include <asm/user32.h>
-#include <asm/ia32.h>
-
-#undef WARN_OLD
-
-static int load_aout_binary(struct linux_binprm *);
-static int load_aout_library(struct file *);
-
-static struct linux_binfmt aout_format = {
-	.module		= THIS_MODULE,
-	.load_binary	= load_aout_binary,
-	.load_shlib	= load_aout_library,
-};
-
-static int set_brk(unsigned long start, unsigned long end)
-{
-	start = PAGE_ALIGN(start);
-	end = PAGE_ALIGN(end);
-	if (end <= start)
-		return 0;
-	return vm_brk(start, end - start);
-}
-
-
-/*
- * create_aout_tables() parses the env- and arg-strings in new user
- * memory and creates the pointer tables from them, and puts their
- * addresses on the "stack", returning the new stack pointer value.
- */
-static u32 __user *create_aout_tables(char __user *p, struct linux_binprm *bprm)
-{
-	u32 __user *argv, *envp, *sp;
-	int argc = bprm->argc, envc = bprm->envc;
-
-	sp = (u32 __user *) ((-(unsigned long)sizeof(u32)) & (unsigned long) p);
-	sp -= envc+1;
-	envp = sp;
-	sp -= argc+1;
-	argv = sp;
-	put_user((unsigned long) envp, --sp);
-	put_user((unsigned long) argv, --sp);
-	put_user(argc, --sp);
-	current->mm->arg_start = (unsigned long) p;
-	while (argc-- > 0) {
-		char c;
-
-		put_user((u32)(unsigned long)p, argv++);
-		do {
-			get_user(c, p++);
-		} while (c);
-	}
-	put_user(0, argv);
-	current->mm->arg_end = current->mm->env_start = (unsigned long) p;
-	while (envc-- > 0) {
-		char c;
-
-		put_user((u32)(unsigned long)p, envp++);
-		do {
-			get_user(c, p++);
-		} while (c);
-	}
-	put_user(0, envp);
-	current->mm->env_end = (unsigned long) p;
-	return sp;
-}
-
-/*
- * These are the functions used to load a.out style executables and shared
- * libraries.  There is no binary dependent code anywhere else.
- */
-static int load_aout_binary(struct linux_binprm *bprm)
-{
-	unsigned long error, fd_offset, rlim;
-	struct pt_regs *regs = current_pt_regs();
-	struct exec ex;
-	int retval;
-
-	ex = *((struct exec *) bprm->buf);		/* exec-header */
-	if ((N_MAGIC(ex) != ZMAGIC && N_MAGIC(ex) != OMAGIC &&
-	     N_MAGIC(ex) != QMAGIC && N_MAGIC(ex) != NMAGIC) ||
-	    N_TRSIZE(ex) || N_DRSIZE(ex) ||
-	    i_size_read(file_inode(bprm->file)) <
-	    ex.a_text+ex.a_data+N_SYMSIZE(ex)+N_TXTOFF(ex)) {
-		return -ENOEXEC;
-	}
-
-	fd_offset = N_TXTOFF(ex);
-
-	/* Check initial limits. This avoids letting people circumvent
-	 * size limits imposed on them by creating programs with large
-	 * arrays in the data or bss.
-	 */
-	rlim = rlimit(RLIMIT_DATA);
-	if (rlim >= RLIM_INFINITY)
-		rlim = ~0;
-	if (ex.a_data + ex.a_bss > rlim)
-		return -ENOMEM;
-
-	/* Flush all traces of the currently running executable */
-	retval = begin_new_exec(bprm);
-	if (retval)
-		return retval;
-
-	/* OK, This is the point of no return */
-	set_personality(PER_LINUX);
-	set_personality_ia32(false);
-
-	setup_new_exec(bprm);
-
-	regs->cs = __USER32_CS;
-	regs->r8 = regs->r9 = regs->r10 = regs->r11 = regs->r12 =
-		regs->r13 = regs->r14 = regs->r15 = 0;
-
-	current->mm->end_code = ex.a_text +
-		(current->mm->start_code = N_TXTADDR(ex));
-	current->mm->end_data = ex.a_data +
-		(current->mm->start_data = N_DATADDR(ex));
-	current->mm->brk = ex.a_bss +
-		(current->mm->start_brk = N_BSSADDR(ex));
-
-	retval = setup_arg_pages(bprm, IA32_STACK_TOP, EXSTACK_DEFAULT);
-	if (retval < 0)
-		return retval;
-
-	if (N_MAGIC(ex) == OMAGIC) {
-		unsigned long text_addr, map_size;
-
-		text_addr = N_TXTADDR(ex);
-		map_size = ex.a_text+ex.a_data;
-
-		error = vm_brk(text_addr & PAGE_MASK, map_size);
-
-		if (error)
-			return error;
-
-		error = read_code(bprm->file, text_addr, 32,
-				  ex.a_text + ex.a_data);
-		if ((signed long)error < 0)
-			return error;
-	} else {
-#ifdef WARN_OLD
-		static unsigned long error_time, error_time2;
-		if ((ex.a_text & 0xfff || ex.a_data & 0xfff) &&
-		    (N_MAGIC(ex) != NMAGIC) &&
-				time_after(jiffies, error_time2 + 5*HZ)) {
-			printk(KERN_NOTICE "executable not page aligned\n");
-			error_time2 = jiffies;
-		}
-
-		if ((fd_offset & ~PAGE_MASK) != 0 &&
-			    time_after(jiffies, error_time + 5*HZ)) {
-			printk(KERN_WARNING
-			       "fd_offset is not page aligned. Please convert "
-			       "program: %pD\n",
-			       bprm->file);
-			error_time = jiffies;
-		}
-#endif
-
-		if (!bprm->file->f_op->mmap || (fd_offset & ~PAGE_MASK) != 0) {
-			error = vm_brk(N_TXTADDR(ex), ex.a_text+ex.a_data);
-			if (error)
-				return error;
-
-			read_code(bprm->file, N_TXTADDR(ex), fd_offset,
-					ex.a_text+ex.a_data);
-			goto beyond_if;
-		}
-
-		error = vm_mmap(bprm->file, N_TXTADDR(ex), ex.a_text,
-				PROT_READ | PROT_EXEC,
-				MAP_FIXED | MAP_PRIVATE | MAP_32BIT,
-				fd_offset);
-
-		if (error != N_TXTADDR(ex))
-			return error;
-
-		error = vm_mmap(bprm->file, N_DATADDR(ex), ex.a_data,
-				PROT_READ | PROT_WRITE | PROT_EXEC,
-				MAP_FIXED | MAP_PRIVATE | MAP_32BIT,
-				fd_offset + ex.a_text);
-		if (error != N_DATADDR(ex))
-			return error;
-	}
-
-beyond_if:
-	error = set_brk(current->mm->start_brk, current->mm->brk);
-	if (error)
-		return error;
-
-	set_binfmt(&aout_format);
-
-	current->mm->start_stack =
-		(unsigned long)create_aout_tables((char __user *)bprm->p, bprm);
-	/* start thread */
-	loadsegment(fs, 0);
-	loadsegment(ds, __USER32_DS);
-	loadsegment(es, __USER32_DS);
-	load_gs_index(0);
-	(regs)->ip = ex.a_entry;
-	(regs)->sp = current->mm->start_stack;
-	(regs)->flags = 0x200;
-	(regs)->cs = __USER32_CS;
-	(regs)->ss = __USER32_DS;
-	regs->r8 = regs->r9 = regs->r10 = regs->r11 =
-	regs->r12 = regs->r13 = regs->r14 = regs->r15 = 0;
-	return 0;
-}
-
-static int load_aout_library(struct file *file)
-{
-	unsigned long bss, start_addr, len, error;
-	int retval;
-	struct exec ex;
-	loff_t pos = 0;
-
-	retval = -ENOEXEC;
-	error = kernel_read(file, &ex, sizeof(ex), &pos);
-	if (error != sizeof(ex))
-		goto out;
-
-	/* We come in here for the regular a.out style of shared libraries */
-	if ((N_MAGIC(ex) != ZMAGIC && N_MAGIC(ex) != QMAGIC) || N_TRSIZE(ex) ||
-	    N_DRSIZE(ex) || ((ex.a_entry & 0xfff) && N_MAGIC(ex) == ZMAGIC) ||
-	    i_size_read(file_inode(file)) <
-	    ex.a_text+ex.a_data+N_SYMSIZE(ex)+N_TXTOFF(ex)) {
-		goto out;
-	}
-
-	if (N_FLAGS(ex))
-		goto out;
-
-	/* For  QMAGIC, the starting address is 0x20 into the page.  We mask
-	   this off to get the starting address for the page */
-
-	start_addr =  ex.a_entry & 0xfffff000;
-
-	if ((N_TXTOFF(ex) & ~PAGE_MASK) != 0) {
-#ifdef WARN_OLD
-		static unsigned long error_time;
-		if (time_after(jiffies, error_time + 5*HZ)) {
-			printk(KERN_WARNING
-			       "N_TXTOFF is not page aligned. Please convert "
-			       "library: %pD\n",
-			       file);
-			error_time = jiffies;
-		}
-#endif
-		retval = vm_brk(start_addr, ex.a_text + ex.a_data + ex.a_bss);
-		if (retval)
-			goto out;
-
-		read_code(file, start_addr, N_TXTOFF(ex),
-			  ex.a_text + ex.a_data);
-		retval = 0;
-		goto out;
-	}
-	/* Now use mmap to map the library into memory. */
-	error = vm_mmap(file, start_addr, ex.a_text + ex.a_data,
-			PROT_READ | PROT_WRITE | PROT_EXEC,
-			MAP_FIXED | MAP_PRIVATE | MAP_32BIT,
-			N_TXTOFF(ex));
-	retval = error;
-	if (error != start_addr)
-		goto out;
-
-	len = PAGE_ALIGN(ex.a_text + ex.a_data);
-	bss = ex.a_text + ex.a_data + ex.a_bss;
-	if (bss > len) {
-		retval = vm_brk(start_addr + len, bss - len);
-		if (retval)
-			goto out;
-	}
-	retval = 0;
-out:
-	return retval;
-}
-
-static int __init init_aout_binfmt(void)
-{
-	register_binfmt(&aout_format);
-	return 0;
-}
-
-static void __exit exit_aout_binfmt(void)
-{
-	unregister_binfmt(&aout_format);
-}
-
-module_init(init_aout_binfmt);
-module_exit(exit_aout_binfmt);
-MODULE_LICENSE("GPL");
-- 
2.29.2


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH] x86: Remove a.out support
  2022-03-10 23:29                     ` [PATCH] x86: Remove a.out support Eric W. Biederman
@ 2022-03-10 23:35                       ` Linus Torvalds
  2022-03-11  8:47                         ` Arnd Bergmann
  2022-03-11 10:03                       ` Borislav Petkov
  1 sibling, 1 reply; 9+ messages in thread
From: Linus Torvalds @ 2022-03-10 23:35 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Kees Cook, LKML, Måns Rullgård, Theodore Ts'o,
	John Paul Adrian Glaubitz, Michael Cree, linux-arch,
	Richard Henderson, linux-m68k, Borislav Petkov, Arnd Bergmann,
	Ivan Kokshaysky, Geert Uytterhoeven, X86 ML, Matt Turner

On Thu, Mar 10, 2022 at 3:29 PM Eric W. Biederman <ebiederm@xmission.com> wrote:
>
> Kees can you pick this one up in for-next/execve as well?
>
> It still applies cleanly and the actual patch seems to have gotten lost
> in the conversation about what more we could do.

Side note: there are similar other turds if a.out goes away, ie on
alpha it's OSF4_COMPAT, and it enables support for a couple of legacy
OSF/1 system calls.

I think that was also discussed in the (old) a.out deprecation thread
back in 2019..

               Linus

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] x86: Remove a.out support
  2022-03-10 23:35                       ` Linus Torvalds
@ 2022-03-11  8:47                         ` Arnd Bergmann
  0 siblings, 0 replies; 9+ messages in thread
From: Arnd Bergmann @ 2022-03-11  8:47 UTC (permalink / raw)
  To: Linus Torvalds
  Cc: Eric W. Biederman, Kees Cook, LKML, Måns Rullgård,
	Theodore Ts'o, John Paul Adrian Glaubitz, Michael Cree,
	linux-arch, Richard Henderson, linux-m68k, Borislav Petkov,
	Arnd Bergmann, Ivan Kokshaysky, Geert Uytterhoeven, X86 ML,
	Matt Turner

On Fri, Mar 11, 2022 at 12:35 AM Linus Torvalds
<torvalds@linux-foundation.org> wrote:
>
> On Thu, Mar 10, 2022 at 3:29 PM Eric W. Biederman <ebiederm@xmission.com> wrote:
> >
> > Kees can you pick this one up in for-next/execve as well?
> >
> > It still applies cleanly and the actual patch seems to have gotten lost
> > in the conversation about what more we could do.
>
> Side note: there are similar other turds if a.out goes away, ie on
> alpha it's OSF4_COMPAT, and it enables support for a couple of legacy
> OSF/1 system calls.
>
> I think that was also discussed in the (old) a.out deprecation thread
> back in 2019..

The only thing that actually depends on CONFIG_OSF4_COMPAT seems to be
the custom logic in readv() and writev(). Those are the two that you removed
in your patch back then[1].

For the other system calls, I fear we can only try to guess which of them
are used in Linux applications and which ones are not. These were always
available to normal Linux user space, so the ones that are similar to our
syscalls could have been used in glibc, e.g. mmap, wait4, stat.

         Arnd

[1] https://lore.kernel.org/all/CAHk-=wgt7M6yA5BJCJo0nF22WgPJnN8CvViL9CAJmd+S+Civ6w@mail.gmail.com/

[2] $ git grep sys_osf arch/alpha/kernel/syscalls/syscall.tbl
7 common osf_wait4 sys_osf_wait4
17 common brk sys_osf_brk
21 common osf_mount sys_osf_mount
43 common osf_set_program_attributes sys_osf_set_program_attributes
48 common osf_sigprocmask sys_osf_sigprocmask
71 common mmap sys_osf_mmap
93 common osf_select sys_osf_select
100 common getpriority sys_osf_getpriority
112 common osf_sigstack sys_osf_sigstack
116 common osf_gettimeofday sys_osf_gettimeofday
117 common osf_getrusage sys_osf_getrusage
120 common readv sys_osf_readv
121 common writev sys_osf_writev
122 common osf_settimeofday sys_osf_settimeofday
138 common osf_utimes sys_osf_utimes
156 common sigaction sys_osf_sigaction
159 common osf_getdirentries sys_osf_getdirentries
160 common osf_statfs sys_osf_statfs
161 common osf_fstatfs sys_osf_fstatfs
165 common osf_getdomainname sys_osf_getdomainname
207 common osf_utsname sys_osf_utsname
224 common osf_stat sys_osf_stat
225 common osf_lstat sys_osf_lstat
226 common osf_fstat sys_osf_fstat
227 common osf_statfs64 sys_osf_statfs64
228 common osf_fstatfs64 sys_osf_fstatfs64
241 common osf_sysinfo sys_osf_sysinfo
244 common osf_proplist_syscall sys_osf_proplist_syscall
251 common osf_usleep_thread sys_osf_usleep_thread
256 common osf_getsysinfo sys_osf_getsysinfo
257 common osf_setsysinfo sys_osf_setsysinfo

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH] x86: Remove a.out support
  2022-03-10 23:29                     ` [PATCH] x86: Remove a.out support Eric W. Biederman
  2022-03-10 23:35                       ` Linus Torvalds
@ 2022-03-11 10:03                       ` Borislav Petkov
  1 sibling, 0 replies; 9+ messages in thread
From: Borislav Petkov @ 2022-03-11 10:03 UTC (permalink / raw)
  To: Eric W. Biederman
  Cc: Kees Cook, LKML, Måns Rullgård, Theodore Ts'o,
	John Paul Adrian Glaubitz, Michael Cree, linux-arch,
	Richard Henderson, linux-m68k, Arnd Bergmann, Ivan Kokshaysky,
	Geert Uytterhoeven, X86 ML, Linus Torvalds, Matt Turner

On Thu, Mar 10, 2022 at 05:29:13PM -0600, Eric W. Biederman wrote:
> Kees can you pick this one up in for-next/execve as well?

I can carry it through tip, no probs.

-- 
Regards/Gruss,
    Boris.

https://people.kernel.org/tglx/notes-about-netiquette

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2022-03-11 10:03 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
     [not found] <20220113160115.5375-1-bp@alien8.de>
     [not found] ` <YeBzxuO0wLn/B2Ew@mit.edu>
     [not found]   ` <YeCuNapJLK4M5sat@zn.tnic>
     [not found]     ` <CAMuHMdUbTNNr16YY1TFe=-uRLjg6yGzgw_RqtAFpyhnOMM5Pvw@mail.gmail.com>
     [not found]       ` <YeHLIDsjGB944GSP@zn.tnic>
     [not found]         ` <CAMuHMdUBr+gpF6Z5nPadjHFYJwgGd+LGoNTV=Sxty+yaY5EWxg@mail.gmail.com>
     [not found]           ` <YeHQmbMYyy92AbBp@zn.tnic>
     [not found]             ` <YeKyBP5rac8sVvWw@zn.tnic>
     [not found]               ` <b40d1377-51d5-4ba3-ab3f-b40626c229ad@physik.fu-berlin.de>
2022-03-09 20:03                 ` [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k Eric W. Biederman
2022-03-09 20:37                   ` Linus Torvalds
2022-03-09 22:02                     ` Kees Cook
2022-03-09 22:04                   ` Kees Cook
2022-03-10 23:29                     ` [PATCH] x86: Remove a.out support Eric W. Biederman
2022-03-10 23:35                       ` Linus Torvalds
2022-03-11  8:47                         ` Arnd Bergmann
2022-03-11 10:03                       ` Borislav Petkov
2022-03-10  8:09                   ` [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k Geert Uytterhoeven

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox