|
@@ -12,8 +12,6 @@
|
|
#include <linux/module.h>
|
|
#include <linux/module.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/kernel.h>
|
|
#include <linux/fs.h>
|
|
#include <linux/fs.h>
|
|
-#include <linux/stat.h>
|
|
|
|
-#include <linux/time.h>
|
|
|
|
#include <linux/mm.h>
|
|
#include <linux/mm.h>
|
|
#include <linux/mman.h>
|
|
#include <linux/mman.h>
|
|
#include <linux/errno.h>
|
|
#include <linux/errno.h>
|
|
@@ -21,20 +19,15 @@
|
|
#include <linux/binfmts.h>
|
|
#include <linux/binfmts.h>
|
|
#include <linux/string.h>
|
|
#include <linux/string.h>
|
|
#include <linux/file.h>
|
|
#include <linux/file.h>
|
|
-#include <linux/fcntl.h>
|
|
|
|
-#include <linux/ptrace.h>
|
|
|
|
#include <linux/slab.h>
|
|
#include <linux/slab.h>
|
|
-#include <linux/shm.h>
|
|
|
|
#include <linux/personality.h>
|
|
#include <linux/personality.h>
|
|
#include <linux/elfcore.h>
|
|
#include <linux/elfcore.h>
|
|
#include <linux/init.h>
|
|
#include <linux/init.h>
|
|
#include <linux/highuid.h>
|
|
#include <linux/highuid.h>
|
|
-#include <linux/smp.h>
|
|
|
|
#include <linux/compiler.h>
|
|
#include <linux/compiler.h>
|
|
#include <linux/highmem.h>
|
|
#include <linux/highmem.h>
|
|
#include <linux/pagemap.h>
|
|
#include <linux/pagemap.h>
|
|
#include <linux/security.h>
|
|
#include <linux/security.h>
|
|
-#include <linux/syscalls.h>
|
|
|
|
#include <linux/random.h>
|
|
#include <linux/random.h>
|
|
#include <linux/elf.h>
|
|
#include <linux/elf.h>
|
|
#include <linux/utsname.h>
|
|
#include <linux/utsname.h>
|
|
@@ -576,7 +569,6 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
|
unsigned long error;
|
|
unsigned long error;
|
|
struct elf_phdr *elf_ppnt, *elf_phdata;
|
|
struct elf_phdr *elf_ppnt, *elf_phdata;
|
|
unsigned long elf_bss, elf_brk;
|
|
unsigned long elf_bss, elf_brk;
|
|
- int elf_exec_fileno;
|
|
|
|
int retval, i;
|
|
int retval, i;
|
|
unsigned int size;
|
|
unsigned int size;
|
|
unsigned long elf_entry;
|
|
unsigned long elf_entry;
|
|
@@ -631,12 +623,6 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
|
goto out_free_ph;
|
|
goto out_free_ph;
|
|
}
|
|
}
|
|
|
|
|
|
- retval = get_unused_fd();
|
|
|
|
- if (retval < 0)
|
|
|
|
- goto out_free_ph;
|
|
|
|
- get_file(bprm->file);
|
|
|
|
- fd_install(elf_exec_fileno = retval, bprm->file);
|
|
|
|
-
|
|
|
|
elf_ppnt = elf_phdata;
|
|
elf_ppnt = elf_phdata;
|
|
elf_bss = 0;
|
|
elf_bss = 0;
|
|
elf_brk = 0;
|
|
elf_brk = 0;
|
|
@@ -655,13 +641,13 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
|
retval = -ENOEXEC;
|
|
retval = -ENOEXEC;
|
|
if (elf_ppnt->p_filesz > PATH_MAX ||
|
|
if (elf_ppnt->p_filesz > PATH_MAX ||
|
|
elf_ppnt->p_filesz < 2)
|
|
elf_ppnt->p_filesz < 2)
|
|
- goto out_free_file;
|
|
|
|
|
|
+ goto out_free_ph;
|
|
|
|
|
|
retval = -ENOMEM;
|
|
retval = -ENOMEM;
|
|
elf_interpreter = kmalloc(elf_ppnt->p_filesz,
|
|
elf_interpreter = kmalloc(elf_ppnt->p_filesz,
|
|
GFP_KERNEL);
|
|
GFP_KERNEL);
|
|
if (!elf_interpreter)
|
|
if (!elf_interpreter)
|
|
- goto out_free_file;
|
|
|
|
|
|
+ goto out_free_ph;
|
|
|
|
|
|
retval = kernel_read(bprm->file, elf_ppnt->p_offset,
|
|
retval = kernel_read(bprm->file, elf_ppnt->p_offset,
|
|
elf_interpreter,
|
|
elf_interpreter,
|
|
@@ -956,8 +942,6 @@ static int load_elf_binary(struct linux_binprm *bprm, struct pt_regs *regs)
|
|
|
|
|
|
kfree(elf_phdata);
|
|
kfree(elf_phdata);
|
|
|
|
|
|
- sys_close(elf_exec_fileno);
|
|
|
|
-
|
|
|
|
set_binfmt(&elf_format);
|
|
set_binfmt(&elf_format);
|
|
|
|
|
|
#ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES
|
|
#ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES
|
|
@@ -1028,8 +1012,6 @@ out_free_dentry:
|
|
fput(interpreter);
|
|
fput(interpreter);
|
|
out_free_interp:
|
|
out_free_interp:
|
|
kfree(elf_interpreter);
|
|
kfree(elf_interpreter);
|
|
-out_free_file:
|
|
|
|
- sys_close(elf_exec_fileno);
|
|
|
|
out_free_ph:
|
|
out_free_ph:
|
|
kfree(elf_phdata);
|
|
kfree(elf_phdata);
|
|
goto out;
|
|
goto out;
|