Skip to content

Commit

Permalink
Deprecate a.out ELF interpreters
Browse files Browse the repository at this point in the history
The Linux ELF loader is quite complicated and messy code (that could
probably need a rewrite, but that's a different chapter).  One particular
messy part in it is the support for non ELF a.out ld.sos.  This was
originally added to make transition from a.out to ELF easier because an
a.out ELF ld.so could be still build using an older a.out toolkit.  But by
now that should be fully obsolete and removing it would clean up
binfmt_elf.c up a bit.

I propose to deprecate this support and remove for 2.6.25.

Drawback is that someone still runs their system with a.out ld.so
they would need to update the ld.so when updating to a new kernel.

This patch just adds an entry to the deprecation file and a printk
warning users.

[[email protected]: better warning message]
Signed-off-by: Andi Kleen <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
Andi Kleen authored and Linus Torvalds committed Oct 17, 2007
1 parent 045f902 commit 8e9073e
Show file tree
Hide file tree
Showing 2 changed files with 19 additions and 0 deletions.
11 changes: 11 additions & 0 deletions Documentation/feature-removal-schedule.txt
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,17 @@ Who: Dominik Brodowski <[email protected]>

---------------------------

What: a.out interpreter support for ELF executables
When: 2.6.25
Files: fs/binfmt_elf.c
Why: Using a.out interpreters for ELF executables was a feature for
transition from a.out to ELF. But now it is unlikely to be still
needed anymore and removing it would simplify the hairy ELF
loader code.
Who: Andi Kleen <[email protected]>

---------------------------

What: remove EXPORT_SYMBOL(kernel_thread)
When: August 2006
Files: arch/*/kernel/*_ksyms.c
Expand Down
8 changes: 8 additions & 0 deletions fs/binfmt_elf.c
Original file line number Diff line number Diff line change
Expand Up @@ -730,6 +730,7 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)

/* Some simple consistency checks for the interpreter */
if (elf_interpreter) {
static int warn;
interpreter_type = INTERPRETER_ELF | INTERPRETER_AOUT;

/* Now figure out which format our binary is */
Expand All @@ -741,6 +742,13 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
if (memcmp(loc->interp_elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
interpreter_type &= ~INTERPRETER_ELF;

if (interpreter_type == INTERPRETER_AOUT && warn < 10) {
printk(KERN_WARNING "a.out ELF interpreter %s is "
"deprecated and will not be supported "
"after Linux 2.6.25\n", elf_interpreter);
warn++;
}

retval = -ELIBBAD;
if (!interpreter_type)
goto out_free_dentry;
Expand Down

0 comments on commit 8e9073e

Please sign in to comment.