* [PATCH] x86: Remove a.out support @ 2022-01-13 16:01 Borislav Petkov 2022-01-13 18:08 ` Kees Cook ` (3 more replies) 0 siblings, 4 replies; 28+ messages in thread From: Borislav Petkov @ 2022-01-13 16:01 UTC (permalink / raw) To: X86 ML; +Cc: Arnd Bergmann, Eric Biederman, Kees Cook, LKML From: Borislav Petkov <bp@suse.de> 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> --- 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 976dd6b532bf..6f3d63dbbddf 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2835,13 +2835,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] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-13 16:01 [PATCH] x86: Remove a.out support Borislav Petkov @ 2022-01-13 18:08 ` Kees Cook 2022-01-13 18:47 ` Theodore Ts'o ` (2 subsequent siblings) 3 siblings, 0 replies; 28+ messages in thread From: Kees Cook @ 2022-01-13 18:08 UTC (permalink / raw) To: Borislav Petkov; +Cc: X86 ML, Arnd Bergmann, Eric Biederman, LKML On Thu, Jan 13, 2022 at 05:01:15PM +0100, Borislav Petkov wrote: > From: Borislav Petkov <bp@suse.de> > > 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> Yes please. :) Reviewed-by: Kees Cook <keescook@chromium.org> -- Kees Cook ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-13 16:01 [PATCH] x86: Remove a.out support Borislav Petkov 2022-01-13 18:08 ` Kees Cook @ 2022-01-13 18:47 ` Theodore Ts'o 2022-01-13 22:56 ` Borislav Petkov 2022-03-11 14:40 ` [tip: x86/cleanups] " tip-bot2 for Borislav Petkov 2022-04-11 17:42 ` tip-bot2 for Borislav Petkov 3 siblings, 1 reply; 28+ messages in thread From: Theodore Ts'o @ 2022-01-13 18:47 UTC (permalink / raw) To: Borislav Petkov; +Cc: X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML On Thu, Jan 13, 2022 at 05:01:15PM +0100, Borislav Petkov wrote: > From: Borislav Petkov <bp@suse.de> > > 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> Let's pour one out for being able to run Minix binaries on Linux. :-) Speaking of which, if we're doing this, are there some old system calls that we could remove at the same time? - Ted ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-13 18:47 ` Theodore Ts'o @ 2022-01-13 22:56 ` Borislav Petkov 2022-01-14 4:06 ` Theodore Ts'o ` (2 more replies) 0 siblings, 3 replies; 28+ messages in thread From: Borislav Petkov @ 2022-01-13 22:56 UTC (permalink / raw) To: Theodore Ts'o; +Cc: X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML On Thu, Jan 13, 2022 at 01:47:34PM -0500, Theodore Ts'o wrote: > Let's pour one out for being able to run Minix binaries on Linux. :-) https://en.wikipedia.org/wiki/Minix_3: "2013-02-21 ... Dropped support for a.out binaries" They themselves killed that support a lot earlier. :-) > Speaking of which, if we're doing this, are there some old system > calls that we could remove at the same time? Good question. Unfortunately, I'm just the janitor removing this and a.out is waaay before my time. :-) But I'm open to suggestions on how to determine which are those obsolete syscalls. Btw, pls do note that this is removing only the x86 a.out support - other arches (m68k and alpha) still select HAVE_AOUT and thus the respective glue in fs/binfmt_aout.c -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-13 22:56 ` Borislav Petkov @ 2022-01-14 4:06 ` Theodore Ts'o 2022-01-14 10:40 ` Arnd Bergmann 2022-01-14 19:09 ` Borislav Petkov 2022-01-14 9:51 ` David Laight 2022-01-14 14:52 ` Geert Uytterhoeven 2 siblings, 2 replies; 28+ messages in thread From: Theodore Ts'o @ 2022-01-14 4:06 UTC (permalink / raw) To: Borislav Petkov; +Cc: X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML On Thu, Jan 13, 2022 at 11:56:53PM +0100, Borislav Petkov wrote: > On Thu, Jan 13, 2022 at 01:47:34PM -0500, Theodore Ts'o wrote: > > Let's pour one out for being able to run Minix binaries on Linux. :-) > > https://en.wikipedia.org/wiki/Minix_3: > > "2013-02-21 ... Dropped support for a.out binaries" > > They themselves killed that support a lot earlier. :-) Well, Minix 3 is a very different beast than the Minix 1.x that Linus used when he was boot-strapping Linux back in 1991. :-) Among other things Minux 1.x is system call compatible with the original V7 Unix from AT&T, whereas Minux 2.x and higher switch to having system calls that were Posix comaptible --- and Minix 2, being at teaching OS, wouldn't have kept any backwards compatibility when Prof. Tannenbaum released the 2nd edition of his Operating Systems Design and Implementation book in 1997. > > Speaking of which, if we're doing this, are there some old system > > calls that we could remove at the same time? > > Good question. > > Unfortunately, I'm just the janitor removing this and a.out is waaay > before my time. :-) > > But I'm open to suggestions on how to determine which are those obsolete > syscalls. Historically there were a couple of different C libraries which x86 binaries for Linux could use: A) minix's libc -- used by binaries compiled using the Minix 1 toolchain B) Libc 4 -- a fork of GNU Libc version 1, for a.out execuables C) Libc 5 -- a fork of GNU Libc version 1, for ELF execuables D) Libc 6 -- GNU Libc version 2, for ELF executables So I think what this would boil down to is finding those system calls that were used by (A) and (B), but not referenced in (C) and (D). I guess we'd also have to check to make sure that some of these ancient system calls might still be used by some of the micro libc's, such as dietlibc, musl, etc. Is it worth doing? Perhaps; perhaps not. It probably wouldn't reduce the size of the kernel by all *that* much, but getting rid of cruft is kind of a good thing for its own sake. Cheers. - Ted ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-14 4:06 ` Theodore Ts'o @ 2022-01-14 10:40 ` Arnd Bergmann 2022-01-14 19:09 ` Borislav Petkov 1 sibling, 0 replies; 28+ messages in thread From: Arnd Bergmann @ 2022-01-14 10:40 UTC (permalink / raw) To: Theodore Ts'o Cc: Borislav Petkov, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML On Fri, Jan 14, 2022 at 5:06 AM Theodore Ts'o <tytso@mit.edu> wrote: > On Thu, Jan 13, 2022 at 11:56:53PM +0100, Borislav Petkov wrote: > > > > But I'm open to suggestions on how to determine which are those obsolete > > syscalls. > > Historically there were a couple of different C libraries > which x86 binaries for Linux could use: > > A) minix's libc -- used by binaries compiled using the Minix 1 toolchain > B) Libc 4 -- a fork of GNU Libc version 1, for a.out execuables > C) Libc 5 -- a fork of GNU Libc version 1, for ELF execuables > D) Libc 6 -- GNU Libc version 2, for ELF executables > > So I think what this would boil down to is finding those system calls > that were used by (A) and (B), but not referenced in (C) and (D). I > guess we'd also have to check to make sure that some of these ancient > system calls might still be used by some of the micro libc's, such as > dietlibc, musl, etc. > > Is it worth doing? Perhaps; perhaps not. It probably wouldn't reduce > the size of the kernel by all *that* much, but getting rid of cruft is > kind of a good thing for its own sake. For reference, these are the system calls that are implemented on i386 as of 5.16 but have been replaced on modern architectures, from ooking only in the linux sources: 2 i386 fork sys_fork 5 i386 open sys_open compat_sys_open 7 i386 waitpid sys_waitpid 8 i386 creat sys_creat 9 i386 link sys_link 10 i386 unlink sys_unlink 13 i386 time sys_time32 14 i386 mknod sys_mknod 15 i386 chmod sys_chmod 16 i386 lchown sys_lchown16 16 i386 lchown sys_lchown16 18 i386 oldstat sys_stat 22 i386 umount sys_oldumount 23 i386 setuid sys_setuid16 24 i386 getuid sys_getuid16 25 i386 stime sys_stime32 27 i386 alarm sys_alarm 28 i386 oldfstat sys_fstat 29 i386 pause sys_pause 30 i386 utime sys_utime32 33 i386 access sys_access 34 i386 nice sys_nice 38 i386 rename sys_rename 39 i386 mkdir sys_mkdir 40 i386 rmdir sys_rmdir 42 i386 pipe sys_pipe 46 i386 setgid sys_setgid16 47 i386 getgid sys_getgid16 48 i386 signal sys_signal 49 i386 geteuid sys_geteuid16 50 i386 getegid sys_getegid16 59 i386 oldolduname sys_olduname 62 i386 ustat sys_ustat compat_sys_ustat 63 i386 dup2 sys_dup2 65 i386 getpgrp sys_getpgrp 67 i386 sigaction sys_sigaction compat_sys_sigaction 68 i386 sgetmask sys_sgetmask 69 i386 ssetmask sys_ssetmask 70 i386 setreuid sys_setreuid16 71 i386 setregid sys_setregid16 72 i386 sigsuspend sys_sigsuspend 73 i386 sigpending sys_sigpending compat_sys_sigpending 80 i386 getgroups sys_getgroups16 81 i386 setgroups sys_setgroups16 82 i386 select sys_old_select compat_sys_old_select 83 i386 symlink sys_symlink 84 i386 oldlstat sys_lstat 85 i386 readlink sys_readlink 86 i386 uselib sys_uselib 89 i386 readdir sys_old_readdir compat_sys_old_readdir 95 i386 fchown sys_fchown16 101 i386 ioperm sys_ioperm 102 i386 socketcall sys_socketcall compat_sys_socketcall 109 i386 olduname sys_uname 110 i386 iopl sys_iopl 117 i386 ipc sys_ipc compat_sys_ipc 119 i386 sigreturn sys_sigreturn compat_sys_sigreturn 123 i386 modify_ldt sys_modify_ldt 126 i386 sigprocmask sys_sigprocmask compat_sys_sigprocmask 135 i386 sysfs sys_sysfs 138 i386 setfsuid sys_setfsuid16 139 i386 setfsgid sys_setfsgid16 141 i386 getdents sys_getdents compat_sys_getdents 142 i386 _newselect sys_select compat_sys_select 164 i386 setresuid sys_setresuid16 165 i386 getresuid sys_getresuid16 168 i386 poll sys_poll 170 i386 setresgid sys_setresgid16 171 i386 getresgid sys_getresgid 182 i386 chown sys_chown16 190 i386 vfork sys_vfork 243 i386 set_thread_area sys_set_thread_area 244 i386 get_thread_area sys_get_thread_area 254 i386 epoll_create sys_epoll_create 256 i386 epoll_wait sys_epoll_wait 271 i386 utimes sys_utimes_time32 291 i386 inotify_init sys_inotify_init 299 i386 futimesat sys_futimesat_time32 321 i386 signalfd sys_signalfd compat_sys_signalfd 323 i386 eventfd sys_eventfd 384 i386 arch_prctl sys_arch_prctl compat_sys_arch_prctl Looking at libc-4.7.2 from Slackware-3.0, the highest syscall number used there is 182 (chown16), anything later is presumably added after the ELF transition was done. All of the syscalls referenced in libc-4.7 are still referenced in libc-5.0, so nothing is obviously changed between those. Excluding the syscalls that are referenced in libc5 brings the candidates down to 7 i386 waitpid sys_waitpid 16 i386 lchown sys_lchown16 18 i386 oldstat sys_stat 28 i386 oldfstat sys_fstat 48 i386 signal sys_signal 59 i386 oldolduname sys_olduname 68 i386 sgetmask sys_sgetmask 69 i386 ssetmask sys_ssetmask 84 i386 oldlstat sys_lstat 109 i386 olduname sys_uname 119 i386 sigreturn sys_sigreturn 123 i386 modify_ldt sys_modify_ldt 135 i386 sysfs sys_sysfs 141 i386 getdents sys_getdents 142 i386 _newselect sys_select 164 i386 setresuid sys_setresuid16 165 i386 getresuid sys_getresuid16 168 i386 poll sys_poll 170 i386 setresgid sys_setresgid16 171 i386 getresgid sys_getresgid16 This is probably a mix of some things that are too old for libc5, some that are too new, and some that were never part of libc but are called from other places. Some may be misrepresented here because the macros got renamed: libc5 calls 'uname' but expects it to be what the kernel now calls '__NR_olduname'. I could not find out which of the 'stat' family it expects because the headers are incomplete in the slackware source package. Arnd ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-14 4:06 ` Theodore Ts'o 2022-01-14 10:40 ` Arnd Bergmann @ 2022-01-14 19:09 ` Borislav Petkov 1 sibling, 0 replies; 28+ messages in thread From: Borislav Petkov @ 2022-01-14 19:09 UTC (permalink / raw) To: Theodore Ts'o; +Cc: X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML Just to answer the "do we still wanna support running original a.out binaries" aspect... On Thu, Jan 13, 2022 at 11:06:03PM -0500, Theodore Ts'o wrote: > > > Let's pour one out for being able to run Minix binaries on Linux. :-) > > > > https://en.wikipedia.org/wiki/Minix_3: > > > > "2013-02-21 ... Dropped support for a.out binaries" > > > > They themselves killed that support a lot earlier. :-) > > Well, Minix 3 is a very different beast than the Minix 1.x Right, but if the Minix 1.x successor has deemed a.out support obsolete and has removed in 2013 I figure we can too. :-) And, btw, Alan had a good, practical idea at the time we talked about deprecating a.out support: https://lore.kernel.org/all/20190305134347.4be2449c@alans-desktop/ And that is probably the best thing to do: if people wanna run old a.out binaries, they can either write an a.out loader as an ELF program or slap an old linux distro in a VM and do that there just fine. If you look at the original thread which started this: https://lore.kernel.org/all/CAG48ez1RVd5mQ_Pb6eygQESaZhpQz765OAZYSoPE0kPqfZEXQg@mail.gmail.com/ it looked even back then like a.out support is so rusty, bitrotten and broken that we're probably even doing ourselves a favor to remove it. Especially if not even the toolchains would even create an a.out executable and no one even noticed. So... > that Linus used when he was boot-strapping Linux back in 1991. :-) > > Among other things Minux 1.x is system call compatible with the > original V7 Unix from AT&T, whereas Minux 2.x and higher switch to > having system calls that were Posix comaptible --- and Minix 2, being > at teaching OS, wouldn't have kept any backwards compatibility when > Prof. Tannenbaum released the 2nd edition of his Operating Systems > Design and Implementation book in 1997. I had a lot of fun reading that book. :-) -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply [flat|nested] 28+ messages in thread
* RE: [PATCH] x86: Remove a.out support 2022-01-13 22:56 ` Borislav Petkov 2022-01-14 4:06 ` Theodore Ts'o @ 2022-01-14 9:51 ` David Laight 2022-01-14 14:52 ` Geert Uytterhoeven 2 siblings, 0 replies; 28+ messages in thread From: David Laight @ 2022-01-14 9:51 UTC (permalink / raw) To: 'Borislav Petkov', Theodore Ts'o Cc: X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML From: Borislav Petkov > Sent: 13 January 2022 22:57 ... > > Btw, pls do note that this is removing only the x86 a.out support - > other arches (m68k and alpha) still select HAVE_AOUT and thus the > respective glue in fs/binfmt_aout.c I didn't think alpha was that old :-) m68k is another matter. But I've probably dismembered the only old m68k system disk I've had to extract the magnets. David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales) ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-13 22:56 ` Borislav Petkov 2022-01-14 4:06 ` Theodore Ts'o 2022-01-14 9:51 ` David Laight @ 2022-01-14 14:52 ` Geert Uytterhoeven 2022-01-14 18:57 ` Theodore Ts'o 2022-01-14 19:12 ` Borislav Petkov 2 siblings, 2 replies; 28+ messages in thread From: Geert Uytterhoeven @ 2022-01-14 14:52 UTC (permalink / raw) To: Borislav Petkov Cc: Theodore Ts'o, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML Hi Boris, On Fri, Jan 14, 2022 at 3:36 PM Borislav Petkov <bp@alien8.de> wrote: > Btw, pls do note that this is removing only the x86 a.out support - > other arches (m68k and alpha) still select HAVE_AOUT and thus the > respective glue in fs/binfmt_aout.c Quoting myself (do I need a canned response for this? ;-): "I think it's safe to assume no one still runs a.out binaries on m68k." https://lore.kernel.org/r/CAMuHMdVGT1QN8WUqNcU8ihPLncUGfrjV49wb-8nHUgHhOzLeNw@mail.gmail.com/ https://lore.kernel.org/r/CAMuHMdW+m0Q+j3rsQdMXnrEPm+XB5Y2AQrxW5sD1mZAKgmEqoA@mail.gmail.com Of course, m68k is not encumbered by a.out Netscape binaries, unlike ia32 and alpha ;-) 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] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-14 14:52 ` Geert Uytterhoeven @ 2022-01-14 18:57 ` Theodore Ts'o 2022-01-14 19:00 ` Geert Uytterhoeven 2022-01-14 19:12 ` Borislav Petkov 1 sibling, 1 reply; 28+ messages in thread From: Theodore Ts'o @ 2022-01-14 18:57 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Borislav Petkov, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML On Fri, Jan 14, 2022 at 03:52:29PM +0100, Geert Uytterhoeven wrote: > Hi Boris, > > On Fri, Jan 14, 2022 at 3:36 PM Borislav Petkov <bp@alien8.de> wrote: > > Btw, pls do note that this is removing only the x86 a.out support - > > other arches (m68k and alpha) still select HAVE_AOUT and thus the > > respective glue in fs/binfmt_aout.c > > Quoting myself (do I need a canned response for this? ;-): > "I think it's safe to assume no one still runs a.out binaries on m68k." > > https://lore.kernel.org/r/CAMuHMdVGT1QN8WUqNcU8ihPLncUGfrjV49wb-8nHUgHhOzLeNw@mail.gmail.com/ > https://lore.kernel.org/r/CAMuHMdW+m0Q+j3rsQdMXnrEPm+XB5Y2AQrxW5sD1mZAKgmEqoA@mail.gmail.com > > Of course, m68k is not encumbered by a.out Netscape binaries, unlike > ia32 and alpha ;-) And Alpha's a.out Netscape binary is what required OSF/1 compatible system calls, so if and when we ever can nuke a.out Alpha support, so perhaps there might also be an opporunity to remove OSF/1 compatibility support... - Ted ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-14 18:57 ` Theodore Ts'o @ 2022-01-14 19:00 ` Geert Uytterhoeven 0 siblings, 0 replies; 28+ messages in thread From: Geert Uytterhoeven @ 2022-01-14 19:00 UTC (permalink / raw) To: Theodore Ts'o Cc: Borislav Petkov, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML Hi Ted, On Fri, Jan 14, 2022 at 7:58 PM Theodore Ts'o <tytso@mit.edu> wrote: > On Fri, Jan 14, 2022 at 03:52:29PM +0100, Geert Uytterhoeven wrote: > > On Fri, Jan 14, 2022 at 3:36 PM Borislav Petkov <bp@alien8.de> wrote: > > > Btw, pls do note that this is removing only the x86 a.out support - > > > other arches (m68k and alpha) still select HAVE_AOUT and thus the > > > respective glue in fs/binfmt_aout.c > > > > Quoting myself (do I need a canned response for this? ;-): > > "I think it's safe to assume no one still runs a.out binaries on m68k." > > > > https://lore.kernel.org/r/CAMuHMdVGT1QN8WUqNcU8ihPLncUGfrjV49wb-8nHUgHhOzLeNw@mail.gmail.com/ > > https://lore.kernel.org/r/CAMuHMdW+m0Q+j3rsQdMXnrEPm+XB5Y2AQrxW5sD1mZAKgmEqoA@mail.gmail.com > > > > Of course, m68k is not encumbered by a.out Netscape binaries, unlike > > ia32 and alpha ;-) > > And Alpha's a.out Netscape binary is what required OSF/1 compatible > system calls, so if and when we ever can nuke a.out Alpha support, so > perhaps there might also be an opporunity to remove OSF/1 > compatibility support... As we seem to be reiterating a discussion from 2019, let's read last time's summary first: https://www.linuxjournal.com/content/deprecating-aout-binaries 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] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-14 14:52 ` Geert Uytterhoeven 2022-01-14 18:57 ` Theodore Ts'o @ 2022-01-14 19:12 ` Borislav Petkov 2022-01-14 19:21 ` Geert Uytterhoeven 1 sibling, 1 reply; 28+ messages in thread From: Borislav Petkov @ 2022-01-14 19:12 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Theodore Ts'o, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML On Fri, Jan 14, 2022 at 03:52:29PM +0100, Geert Uytterhoeven wrote: > Quoting myself (do I need a canned response for this? ;-): > "I think it's safe to assume no one still runs a.out binaries on m68k." I remember now that I've looked at the thread from back then but what are you trying to say with your quote? Do you wanna see another patch which rips out a.out support from m68k? I could do one ontop but besides build-testing I can't test any other way on m68k... :-) -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-14 19:12 ` Borislav Petkov @ 2022-01-14 19:21 ` Geert Uytterhoeven 2022-01-14 19:35 ` Borislav Petkov 2022-01-15 4:54 ` [PATCH] x86: Remove a.out support David Laight 0 siblings, 2 replies; 28+ messages in thread From: Geert Uytterhoeven @ 2022-01-14 19:21 UTC (permalink / raw) To: Borislav Petkov Cc: Theodore Ts'o, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML Hi Boris, On Fri, Jan 14, 2022 at 8:12 PM Borislav Petkov <bp@alien8.de> wrote: > On Fri, Jan 14, 2022 at 03:52:29PM +0100, Geert Uytterhoeven wrote: > > Quoting myself (do I need a canned response for this? ;-): > > "I think it's safe to assume no one still runs a.out binaries on m68k." > > I remember now that I've looked at the thread from back then but what > are you trying to say with your quote? > > Do you wanna see another patch which rips out a.out support from m68k? > > I could do one ontop but besides build-testing I can't test any other > way on m68k... > > :-) I mean that I can rip it out on m68k. Who's gonna take care of alpha? 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] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-14 19:21 ` Geert Uytterhoeven @ 2022-01-14 19:35 ` Borislav Petkov 2022-01-15 11:37 ` Borislav Petkov 2022-01-15 4:54 ` [PATCH] x86: Remove a.out support David Laight 1 sibling, 1 reply; 28+ messages in thread From: Borislav Petkov @ 2022-01-14 19:35 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Theodore Ts'o, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML On Fri, Jan 14, 2022 at 08:21:36PM +0100, Geert Uytterhoeven wrote: > I mean that I can rip it out on m68k. > > Who's gonna take care of alpha? I'm sceptical anyone would: $ ./scripts/get_maintainer.pl -f arch/alpha/ Richard Henderson <rth@twiddle.net> (odd fixer:ALPHA PORT) Ivan Kokshaysky <ink@jurassic.park.msu.ru> (odd fixer:ALPHA PORT) which leaves me. I could give it a try. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-14 19:35 ` Borislav Petkov @ 2022-01-15 11:37 ` Borislav Petkov 2022-01-15 19:42 ` John Paul Adrian Glaubitz 0 siblings, 1 reply; 28+ messages in thread From: Borislav Petkov @ 2022-01-15 11:37 UTC (permalink / raw) To: Geert Uytterhoeven Cc: Theodore Ts'o, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML, Matt Turner, John Paul Adrian Glaubitz, Måns Rullgård, Michael Cree On Fri, Jan 14, 2022 at 08:35:53PM +0100, Borislav Petkov wrote: > On Fri, Jan 14, 2022 at 08:21:36PM +0100, Geert Uytterhoeven wrote: > > I mean that I can rip it out on m68k. > > > > Who's gonna take care of alpha? > > I'm sceptical anyone would: > > $ ./scripts/get_maintainer.pl -f arch/alpha/ > Richard Henderson <rth@twiddle.net> (odd fixer:ALPHA PORT) > Ivan Kokshaysky <ink@jurassic.park.msu.ru> (odd fixer:ALPHA PORT) > > which leaves me. I could give it a try. Well, on that old thread from 2019 people expressed the wish to be able to run a.out binaries on Alpha. Let's see whether that has changed in the meantime. /me CCs them. -- Regards/Gruss, Boris. https://people.kernel.org/tglx/notes-about-netiquette ^ permalink raw reply [flat|nested] 28+ messages in thread
* Re: [PATCH] x86: Remove a.out support 2022-01-15 11:37 ` Borislav Petkov @ 2022-01-15 19:42 ` John Paul Adrian Glaubitz 2022-03-09 20:03 ` [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k Eric W. Biederman 0 siblings, 1 reply; 28+ messages in thread From: John Paul Adrian Glaubitz @ 2022-01-15 19:42 UTC (permalink / raw) To: Borislav Petkov, Geert Uytterhoeven Cc: Theodore Ts'o, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML, Matt Turner, Måns Rullgård, Michael Cree Hi Borislav! On 1/15/22 12:37, Borislav Petkov wrote: > On Fri, Jan 14, 2022 at 08:35:53PM +0100, Borislav Petkov wrote: >> On Fri, Jan 14, 2022 at 08:21:36PM +0100, Geert Uytterhoeven wrote: >>> I mean that I can rip it out on m68k. >>> >>> Who's gonna take care of alpha? >> >> I'm sceptical anyone would: >> >> $ ./scripts/get_maintainer.pl -f arch/alpha/ >> Richard Henderson <rth@twiddle.net> (odd fixer:ALPHA PORT) >> Ivan Kokshaysky <ink@jurassic.park.msu.ru> (odd fixer:ALPHA PORT) >> >> which leaves me. I could give it a try. > > Well, on that old thread from 2019 people expressed the wish to be able > to run a.out binaries on Alpha. Let's see whether that has changed in > the meantime. Checking on the message I sent three years ago, it didn't seem that I was opposed to removing a.out support, but that I would be happy to help test the patches. I don't have any particular use case for a.out support either. Adrian -- .''`. John Paul Adrian Glaubitz : :' : Debian Developer - glaubitz@debian.org `. `' Freie Universitaet Berlin - glaubitz@physik.fu-berlin.de `- GPG: 62FF 8A75 84E0 2956 9546 0006 7426 3B37 F5B5 F913 ^ permalink raw reply [flat|nested] 28+ messages in thread
* [PATCH] a.out: Stop building a.out/osf1 support on alpha and m68k 2022-01-15 19:42 ` John Paul Adrian Glaubitz @ 2022-03-09 20:03 ` Eric W. Biederman 2022-03-09 20:37 ` Linus Torvalds ` (2 more replies) 0 siblings, 3 replies; 28+ 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] 28+ 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; 28+ 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] 28+ 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; 28+ 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] 28+ 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; 28+ 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] 28+ 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; 28+ 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] 28+ 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; 28+ 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] 28+ 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; 28+ 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] 28+ 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; 28+ 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] 28+ 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; 28+ 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] 28+ messages in thread
* RE: [PATCH] x86: Remove a.out support 2022-01-14 19:21 ` Geert Uytterhoeven 2022-01-14 19:35 ` Borislav Petkov @ 2022-01-15 4:54 ` David Laight 1 sibling, 0 replies; 28+ messages in thread From: David Laight @ 2022-01-15 4:54 UTC (permalink / raw) To: 'Geert Uytterhoeven', Borislav Petkov Cc: Theodore Ts'o, X86 ML, Arnd Bergmann, Eric Biederman, Kees Cook, LKML From: Geert Uytterhoeven > Sent: 14 January 2022 19:22 ... > Who's gonna take care of alpha? Would anyone notice if the knife slipped? David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales) ^ permalink raw reply [flat|nested] 28+ messages in thread
* [tip: x86/cleanups] x86: Remove a.out support 2022-01-13 16:01 [PATCH] x86: Remove a.out support Borislav Petkov 2022-01-13 18:08 ` Kees Cook 2022-01-13 18:47 ` Theodore Ts'o @ 2022-03-11 14:40 ` tip-bot2 for Borislav Petkov 2022-04-11 17:42 ` tip-bot2 for Borislav Petkov 3 siblings, 0 replies; 28+ messages in thread From: tip-bot2 for Borislav Petkov @ 2022-03-11 14:40 UTC (permalink / raw) To: linux-tip-commits; +Cc: Borislav Petkov, Kees Cook, x86, linux-kernel The following commit has been merged into the x86/cleanups branch of tip: Commit-ID: f9444ea5e20847d1dd4a98d4dff4cc97655834bb Gitweb: https://git.kernel.org/tip/f9444ea5e20847d1dd4a98d4dff4cc97655834bb Author: Borislav Petkov <bp@suse.de> AuthorDate: Thu, 13 Jan 2022 14:26:10 +01:00 Committer: Borislav Petkov <bp@suse.de> CommitterDate: Fri, 11 Mar 2022 11:06:32 +01:00 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://lore.kernel.org/r/20220113160115.5375-1-bp@alien8.de --- 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 9f5bd41..b6563d6 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 8e4d039..e481056 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 9bd1524..0000000 --- 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"); ^ permalink raw reply related [flat|nested] 28+ messages in thread
* [tip: x86/cleanups] x86: Remove a.out support 2022-01-13 16:01 [PATCH] x86: Remove a.out support Borislav Petkov ` (2 preceding siblings ...) 2022-03-11 14:40 ` [tip: x86/cleanups] " tip-bot2 for Borislav Petkov @ 2022-04-11 17:42 ` tip-bot2 for Borislav Petkov 3 siblings, 0 replies; 28+ messages in thread From: tip-bot2 for Borislav Petkov @ 2022-04-11 17:42 UTC (permalink / raw) To: linux-tip-commits; +Cc: Borislav Petkov, Kees Cook, x86, linux-kernel The following commit has been merged into the x86/cleanups branch of tip: Commit-ID: c7bda0dca98cca351a9bc852b3df8b9b99ffd400 Gitweb: https://git.kernel.org/tip/c7bda0dca98cca351a9bc852b3df8b9b99ffd400 Author: Borislav Petkov <bp@suse.de> AuthorDate: Thu, 13 Jan 2022 14:26:10 +01:00 Committer: Borislav Petkov <bp@suse.de> CommitterDate: Mon, 11 Apr 2022 18:04:27 +02:00 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. Fold in a hunk removing the reference to arch/x86/ia32/ia32_aout.c in MAINTAINERS: https://lore.kernel.org/r/20220316050828.17255-1-lukas.bulwahn@gmail.com Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Kees Cook <keescook@chromium.org> Link: https://lore.kernel.org/r/20220113160115.5375-1-bp@alien8.de --- MAINTAINERS | 1 +- arch/x86/Kconfig | 7 +- arch/x86/ia32/Makefile | 2 +- arch/x86/ia32/ia32_aout.c | 325 +------------------------------------- 4 files changed, 335 deletions(-) delete mode 100644 arch/x86/ia32/ia32_aout.c diff --git a/MAINTAINERS b/MAINTAINERS index fd768d4..795e4c7 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7378,7 +7378,6 @@ L: linux-mm@kvack.org S: Supported T: git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/execve F: arch/alpha/kernel/binfmt_loader.c -F: arch/x86/ia32/ia32_aout.c F: fs/*binfmt_*.c F: fs/exec.c F: include/linux/binfmts.h diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index b0142e0..69231f6 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -2838,13 +2838,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_ABI bool "x32 ABI for 64-bit mode" depends on X86_64 diff --git a/arch/x86/ia32/Makefile b/arch/x86/ia32/Makefile index 8e4d039..e481056 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 9bd1524..0000000 --- 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"); ^ permalink raw reply related [flat|nested] 28+ messages in thread
end of thread, other threads:[~2022-04-11 17:43 UTC | newest] Thread overview: 28+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2022-01-13 16:01 [PATCH] x86: Remove a.out support Borislav Petkov 2022-01-13 18:08 ` Kees Cook 2022-01-13 18:47 ` Theodore Ts'o 2022-01-13 22:56 ` Borislav Petkov 2022-01-14 4:06 ` Theodore Ts'o 2022-01-14 10:40 ` Arnd Bergmann 2022-01-14 19:09 ` Borislav Petkov 2022-01-14 9:51 ` David Laight 2022-01-14 14:52 ` Geert Uytterhoeven 2022-01-14 18:57 ` Theodore Ts'o 2022-01-14 19:00 ` Geert Uytterhoeven 2022-01-14 19:12 ` Borislav Petkov 2022-01-14 19:21 ` Geert Uytterhoeven 2022-01-14 19:35 ` Borislav Petkov 2022-01-15 11:37 ` Borislav Petkov 2022-01-15 19:42 ` John Paul Adrian Glaubitz 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 2022-01-15 4:54 ` [PATCH] x86: Remove a.out support David Laight 2022-03-11 14:40 ` [tip: x86/cleanups] " tip-bot2 for Borislav Petkov 2022-04-11 17:42 ` tip-bot2 for Borislav Petkov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).