2 * linux/fs/binfmt_elf.c
4 * These are the functions used to load ELF format executables as used
5 * on SVr4 machines. Information on the format may be found in the book
6 * "UNIX SYSTEM V RELEASE 4 Programmers Guide: Ansi C and Programming Support
9 * Copyright 1993, 1994: Eric Youngdale (ericy@cais.com).
12 #include <linux/module.h>
13 #include <linux/kernel.h>
15 #include <linux/stat.h>
16 #include <linux/time.h>
18 #include <linux/mman.h>
19 #include <linux/a.out.h>
20 #include <linux/errno.h>
21 #include <linux/signal.h>
22 #include <linux/binfmts.h>
23 #include <linux/string.h>
24 #include <linux/file.h>
25 #include <linux/fcntl.h>
26 #include <linux/ptrace.h>
27 #include <linux/slab.h>
28 #include <linux/shm.h>
29 #include <linux/personality.h>
30 #include <linux/elfcore.h>
31 #include <linux/init.h>
32 #include <linux/highuid.h>
33 #include <linux/smp.h>
34 #include <linux/smp_lock.h>
35 #include <linux/compiler.h>
36 #include <linux/highmem.h>
37 #include <linux/pagemap.h>
38 #include <linux/security.h>
39 #include <linux/syscalls.h>
40 #include <linux/vs_memory.h>
42 #include <asm/uaccess.h>
43 #include <asm/param.h>
45 #include <linux/elf.h>
47 static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs);
48 static int load_elf_library(struct file*);
49 static unsigned long elf_map (struct file *, unsigned long, struct elf_phdr *, int, int);
50 extern int dump_fpu (struct pt_regs *, elf_fpregset_t *);
53 #define elf_addr_t unsigned long
57 * If we don't support core dumping, then supply a NULL so we
60 #ifdef USE_ELF_CORE_DUMP
61 static int elf_core_dump(long signr, struct pt_regs * regs, struct file * file);
63 #define elf_core_dump NULL
66 #if ELF_EXEC_PAGESIZE > PAGE_SIZE
67 # define ELF_MIN_ALIGN ELF_EXEC_PAGESIZE
69 # define ELF_MIN_ALIGN PAGE_SIZE
72 #define ELF_PAGESTART(_v) ((_v) & ~(unsigned long)(ELF_MIN_ALIGN-1))
73 #define ELF_PAGEOFFSET(_v) ((_v) & (ELF_MIN_ALIGN-1))
74 #define ELF_PAGEALIGN(_v) (((_v) + ELF_MIN_ALIGN - 1) & ~(ELF_MIN_ALIGN - 1))
76 static struct linux_binfmt elf_format = {
77 .module = THIS_MODULE,
78 .load_binary = load_elf_binary,
79 .load_shlib = load_elf_library,
80 .core_dump = elf_core_dump,
81 .min_coredump = ELF_EXEC_PAGESIZE
84 #define BAD_ADDR(x) ((unsigned long)(x) > TASK_SIZE)
86 static int set_brk(unsigned long start, unsigned long end)
88 start = ELF_PAGEALIGN(start);
89 end = ELF_PAGEALIGN(end);
91 unsigned long addr = do_brk(start, end - start);
95 current->mm->start_brk = current->mm->brk = end;
100 /* We need to explicitly zero any fractional pages
101 after the data section (i.e. bss). This would
102 contain the junk from the file that should not
106 static void padzero(unsigned long elf_bss)
110 nbyte = ELF_PAGEOFFSET(elf_bss);
112 nbyte = ELF_MIN_ALIGN - nbyte;
113 clear_user((void __user *) elf_bss, nbyte);
117 /* Let's use some macros to make this stack manipulation a litle clearer */
118 #ifdef CONFIG_STACK_GROWSUP
119 #define STACK_ADD(sp, items) ((elf_addr_t __user *)(sp) + (items))
120 #define STACK_ROUND(sp, items) \
121 ((15 + (unsigned long) ((sp) + (items))) &~ 15UL)
122 #define STACK_ALLOC(sp, len) ({ elf_addr_t __user *old_sp = (elf_addr_t __user *)sp; sp += len; old_sp; })
124 #define STACK_ADD(sp, items) ((elf_addr_t __user *)(sp) - (items))
125 #define STACK_ROUND(sp, items) \
126 (((unsigned long) (sp - items)) &~ 15UL)
127 #define STACK_ALLOC(sp, len) ({ sp -= len ; sp; })
131 create_elf_tables(struct linux_binprm *bprm, struct elfhdr * exec,
132 int interp_aout, unsigned long load_addr,
133 unsigned long interp_load_addr)
135 unsigned long p = bprm->p;
136 int argc = bprm->argc;
137 int envc = bprm->envc;
138 elf_addr_t __user *argv;
139 elf_addr_t __user *envp;
140 elf_addr_t __user *sp;
141 elf_addr_t __user *u_platform;
142 const char *k_platform = ELF_PLATFORM;
144 elf_addr_t *elf_info;
146 struct task_struct *tsk = current;
149 * If this architecture has a platform capability string, copy it
150 * to userspace. In some cases (Sparc), this info is impossible
151 * for userspace to get any other way, in others (i386) it is
157 size_t len = strlen(k_platform) + 1;
161 * In some cases (e.g. Hyper-Threading), we want to avoid L1
162 * evictions by the processes running on the same package. One
163 * thing we can do is to shuffle the initial stack for them.
165 * The conditionals here are unneeded, but kept in to make the
166 * code behaviour the same as pre change unless we have
167 * hyperthreaded processors. This should be cleaned up
171 if (smp_num_siblings > 1)
172 STACK_ALLOC(p, ((current->pid % 64) << 7));
174 u_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
175 __copy_to_user(u_platform, k_platform, len);
178 /* Create the ELF interpreter info */
179 elf_info = (elf_addr_t *) current->mm->saved_auxv;
180 #define NEW_AUX_ENT(id, val) \
181 do { elf_info[ei_index++] = id; elf_info[ei_index++] = val; } while (0)
185 * ARCH_DLINFO must come first so PPC can do its special alignment of
190 NEW_AUX_ENT(AT_HWCAP, ELF_HWCAP);
191 NEW_AUX_ENT(AT_PAGESZ, ELF_EXEC_PAGESIZE);
192 NEW_AUX_ENT(AT_CLKTCK, CLOCKS_PER_SEC);
193 NEW_AUX_ENT(AT_PHDR, load_addr + exec->e_phoff);
194 NEW_AUX_ENT(AT_PHENT, sizeof (struct elf_phdr));
195 NEW_AUX_ENT(AT_PHNUM, exec->e_phnum);
196 NEW_AUX_ENT(AT_BASE, interp_load_addr);
197 NEW_AUX_ENT(AT_FLAGS, 0);
198 NEW_AUX_ENT(AT_ENTRY, exec->e_entry);
199 NEW_AUX_ENT(AT_UID, (elf_addr_t) tsk->uid);
200 NEW_AUX_ENT(AT_EUID, (elf_addr_t) tsk->euid);
201 NEW_AUX_ENT(AT_GID, (elf_addr_t) tsk->gid);
202 NEW_AUX_ENT(AT_EGID, (elf_addr_t) tsk->egid);
203 NEW_AUX_ENT(AT_SECURE, (elf_addr_t) security_bprm_secureexec(bprm));
205 NEW_AUX_ENT(AT_PLATFORM, (elf_addr_t)(unsigned long)u_platform);
207 if (bprm->interp_flags & BINPRM_FLAGS_EXECFD) {
208 NEW_AUX_ENT(AT_EXECFD, (elf_addr_t) bprm->interp_data);
211 /* AT_NULL is zero; clear the rest too */
212 memset(&elf_info[ei_index], 0,
213 sizeof current->mm->saved_auxv - ei_index * sizeof elf_info[0]);
215 /* And advance past the AT_NULL entry. */
218 sp = STACK_ADD(p, ei_index);
220 items = (argc + 1) + (envc + 1);
222 items += 3; /* a.out interpreters require argv & envp too */
224 items += 1; /* ELF interpreters only put argc on the stack */
226 bprm->p = STACK_ROUND(sp, items);
228 /* Point sp at the lowest address on the stack */
229 #ifdef CONFIG_STACK_GROWSUP
230 sp = (elf_addr_t __user *)bprm->p - items - ei_index;
231 bprm->exec = (unsigned long) sp; /* XXX: PARISC HACK */
233 sp = (elf_addr_t __user *)bprm->p;
236 /* Now, let's put argc (and argv, envp if appropriate) on the stack */
237 __put_user(argc, sp++);
240 envp = argv + argc + 1;
241 __put_user((elf_addr_t)(unsigned long)argv, sp++);
242 __put_user((elf_addr_t)(unsigned long)envp, sp++);
245 envp = argv + argc + 1;
248 /* Populate argv and envp */
249 p = current->mm->arg_start;
252 __put_user((elf_addr_t)p, argv++);
253 len = strnlen_user((void __user *)p, PAGE_SIZE*MAX_ARG_PAGES);
254 if (!len || len > PAGE_SIZE*MAX_ARG_PAGES)
259 current->mm->arg_end = current->mm->env_start = p;
262 __put_user((elf_addr_t)p, envp++);
263 len = strnlen_user((void __user *)p, PAGE_SIZE*MAX_ARG_PAGES);
264 if (!len || len > PAGE_SIZE*MAX_ARG_PAGES)
269 current->mm->env_end = p;
271 /* Put the elf_info on the stack in the right place. */
272 sp = (elf_addr_t __user *)envp + 1;
273 copy_to_user(sp, elf_info, ei_index * sizeof(elf_addr_t));
278 static unsigned long elf_map(struct file *filep, unsigned long addr,
279 struct elf_phdr *eppnt, int prot, int type)
281 unsigned long map_addr;
283 down_write(¤t->mm->mmap_sem);
284 map_addr = do_mmap(filep, ELF_PAGESTART(addr),
285 eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr), prot, type,
286 eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr));
287 up_write(¤t->mm->mmap_sem);
291 #endif /* !elf_map */
293 /* This is much more generalized than the library routine read function,
294 so we keep this separate. Technically the library read function
295 is only provided so that we can read a.out libraries that have
298 static unsigned long load_elf_interp(struct elfhdr * interp_elf_ex,
299 struct file * interpreter,
300 unsigned long *interp_load_addr)
302 struct elf_phdr *elf_phdata;
303 struct elf_phdr *eppnt;
304 unsigned long load_addr = 0;
305 int load_addr_set = 0;
306 unsigned long last_bss = 0, elf_bss = 0;
307 unsigned long error = ~0UL;
310 /* First of all, some simple consistency checks */
311 if (interp_elf_ex->e_type != ET_EXEC &&
312 interp_elf_ex->e_type != ET_DYN)
314 if (!elf_check_arch(interp_elf_ex))
316 if (!interpreter->f_op || !interpreter->f_op->mmap)
320 * If the size of this structure has changed, then punt, since
321 * we will be doing the wrong thing.
323 if (interp_elf_ex->e_phentsize != sizeof(struct elf_phdr))
325 if (interp_elf_ex->e_phnum > 65536U / sizeof(struct elf_phdr))
328 /* Now read in all of the header information */
330 size = sizeof(struct elf_phdr) * interp_elf_ex->e_phnum;
331 if (size > ELF_MIN_ALIGN)
333 elf_phdata = (struct elf_phdr *) kmalloc(size, GFP_KERNEL);
337 retval = kernel_read(interpreter,interp_elf_ex->e_phoff,(char *)elf_phdata,size);
343 for (i=0; i<interp_elf_ex->e_phnum; i++, eppnt++) {
344 if (eppnt->p_type == PT_LOAD) {
345 int elf_type = MAP_PRIVATE | MAP_DENYWRITE;
347 unsigned long vaddr = 0;
348 unsigned long k, map_addr;
350 if (eppnt->p_flags & PF_R) elf_prot = PROT_READ;
351 if (eppnt->p_flags & PF_W) elf_prot |= PROT_WRITE;
352 if (eppnt->p_flags & PF_X) elf_prot |= PROT_EXEC;
353 vaddr = eppnt->p_vaddr;
354 if (interp_elf_ex->e_type == ET_EXEC || load_addr_set)
355 elf_type |= MAP_FIXED;
357 map_addr = elf_map(interpreter, load_addr + vaddr, eppnt, elf_prot, elf_type);
359 if (BAD_ADDR(map_addr))
362 if (!load_addr_set && interp_elf_ex->e_type == ET_DYN) {
363 load_addr = map_addr - ELF_PAGESTART(vaddr);
368 * Check to see if the section's size will overflow the
369 * allowed task size. Note that p_filesz must always be
370 * <= p_memsize so it is only necessary to check p_memsz.
372 k = load_addr + eppnt->p_vaddr;
373 if (k > TASK_SIZE || eppnt->p_filesz > eppnt->p_memsz ||
374 eppnt->p_memsz > TASK_SIZE || TASK_SIZE - eppnt->p_memsz < k) {
380 * Find the end of the file mapping for this phdr, and keep
381 * track of the largest address we see for this.
383 k = load_addr + eppnt->p_vaddr + eppnt->p_filesz;
388 * Do the same thing for the memory mapping - between
389 * elf_bss and last_bss is the bss section.
391 k = load_addr + eppnt->p_memsz + eppnt->p_vaddr;
398 * Now fill out the bss section. First pad the last page up
399 * to the page boundary, and then perform a mmap to make sure
400 * that there are zero-mapped pages up to and including the
404 elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1); /* What we have mapped so far */
406 /* Map the last of the bss segment */
407 if (last_bss > elf_bss) {
408 error = do_brk(elf_bss, last_bss - elf_bss);
413 *interp_load_addr = load_addr;
414 error = ((unsigned long) interp_elf_ex->e_entry) + load_addr;
422 static unsigned long load_aout_interp(struct exec * interp_ex,
423 struct file * interpreter)
425 unsigned long text_data, elf_entry = ~0UL;
429 current->mm->end_code = interp_ex->a_text;
430 text_data = interp_ex->a_text + interp_ex->a_data;
431 current->mm->end_data = text_data;
432 current->mm->brk = interp_ex->a_bss + text_data;
434 switch (N_MAGIC(*interp_ex)) {
437 addr = (char __user *)0;
441 offset = N_TXTOFF(*interp_ex);
442 addr = (char __user *) N_TXTADDR(*interp_ex);
448 do_brk(0, text_data);
449 if (!interpreter->f_op || !interpreter->f_op->read)
451 if (interpreter->f_op->read(interpreter, addr, text_data, &offset) < 0)
453 flush_icache_range((unsigned long)addr,
454 (unsigned long)addr + text_data);
456 do_brk(ELF_PAGESTART(text_data + ELF_MIN_ALIGN - 1),
458 elf_entry = interp_ex->a_entry;
465 * These are the functions used to load ELF style executables and shared
466 * libraries. There is no binary dependent code anywhere else.
469 #define INTERPRETER_NONE 0
470 #define INTERPRETER_AOUT 1
471 #define INTERPRETER_ELF 2
474 static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
476 struct file *interpreter = NULL; /* to shut gcc up */
477 unsigned long load_addr = 0, load_bias = 0;
478 int load_addr_set = 0;
479 char * elf_interpreter = NULL;
480 unsigned int interpreter_type = INTERPRETER_NONE;
481 unsigned char ibcs2_interpreter = 0;
483 struct elf_phdr * elf_ppnt, *elf_phdata;
484 unsigned long elf_bss, elf_brk;
488 unsigned long elf_entry, interp_load_addr = 0;
489 unsigned long start_code, end_code, start_data, end_data;
490 unsigned long reloc_func_desc = 0;
491 struct elfhdr elf_ex;
492 struct elfhdr interp_elf_ex;
493 struct exec interp_ex;
494 char passed_fileno[6];
495 struct files_struct *files;
496 int have_pt_gnu_stack, executable_stack = EXSTACK_DEFAULT;
497 unsigned long def_flags = 0;
499 /* Get the exec-header */
500 elf_ex = *((struct elfhdr *) bprm->buf);
503 /* First of all, some simple consistency checks */
504 if (memcmp(elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
507 if (elf_ex.e_type != ET_EXEC && elf_ex.e_type != ET_DYN)
509 if (!elf_check_arch(&elf_ex))
511 if (!bprm->file->f_op||!bprm->file->f_op->mmap)
514 /* Now read in all of the header information */
517 if (elf_ex.e_phentsize != sizeof(struct elf_phdr))
519 if (elf_ex.e_phnum > 65536U / sizeof(struct elf_phdr))
521 size = elf_ex.e_phnum * sizeof(struct elf_phdr);
522 elf_phdata = (struct elf_phdr *) kmalloc(size, GFP_KERNEL);
526 retval = kernel_read(bprm->file, elf_ex.e_phoff, (char *) elf_phdata, size);
530 files = current->files; /* Refcounted so ok */
531 retval = unshare_files();
534 if (files == current->files) {
535 put_files_struct(files);
539 /* exec will make our files private anyway, but for the a.out
540 loader stuff we need to do it earlier */
542 retval = get_unused_fd();
545 get_file(bprm->file);
546 fd_install(elf_exec_fileno = retval, bprm->file);
548 elf_ppnt = elf_phdata;
557 for (i = 0; i < elf_ex.e_phnum; i++) {
558 if (elf_ppnt->p_type == PT_INTERP) {
559 /* This is the program interpreter used for
560 * shared libraries - for now assume that this
561 * is an a.out format binary
565 if (elf_ppnt->p_filesz > PATH_MAX)
567 elf_interpreter = (char *) kmalloc(elf_ppnt->p_filesz,
569 if (!elf_interpreter)
572 retval = kernel_read(bprm->file, elf_ppnt->p_offset,
576 goto out_free_interp;
577 /* If the program interpreter is one of these two,
578 * then assume an iBCS2 image. Otherwise assume
579 * a native linux image.
581 if (strcmp(elf_interpreter,"/usr/lib/libc.so.1") == 0 ||
582 strcmp(elf_interpreter,"/usr/lib/ld.so.1") == 0)
583 ibcs2_interpreter = 1;
586 * The early SET_PERSONALITY here is so that the lookup
587 * for the interpreter happens in the namespace of the
588 * to-be-execed image. SET_PERSONALITY can select an
591 * However, SET_PERSONALITY is NOT allowed to switch
592 * this task into the new images's memory mapping
593 * policy - that is, TASK_SIZE must still evaluate to
594 * that which is appropriate to the execing application.
595 * This is because exit_mmap() needs to have TASK_SIZE
596 * evaluate to the size of the old image.
598 * So if (say) a 64-bit application is execing a 32-bit
599 * application it is the architecture's responsibility
600 * to defer changing the value of TASK_SIZE until the
601 * switch really is going to happen - do this in
602 * flush_thread(). - akpm
604 SET_PERSONALITY(elf_ex, ibcs2_interpreter);
606 interpreter = open_exec(elf_interpreter);
607 retval = PTR_ERR(interpreter);
608 if (IS_ERR(interpreter))
609 goto out_free_interp;
610 retval = kernel_read(interpreter, 0, bprm->buf, BINPRM_BUF_SIZE);
612 goto out_free_dentry;
614 /* Get the exec headers */
615 interp_ex = *((struct exec *) bprm->buf);
616 interp_elf_ex = *((struct elfhdr *) bprm->buf);
622 elf_ppnt = elf_phdata;
623 for (i = 0; i < elf_ex.e_phnum; i++, elf_ppnt++)
624 if (elf_ppnt->p_type == PT_GNU_STACK) {
625 if (elf_ppnt->p_flags & PF_X)
626 executable_stack = EXSTACK_ENABLE_X;
628 executable_stack = EXSTACK_DISABLE_X;
631 have_pt_gnu_stack = (i < elf_ex.e_phnum);
633 /* Some simple consistency checks for the interpreter */
634 if (elf_interpreter) {
635 interpreter_type = INTERPRETER_ELF | INTERPRETER_AOUT;
637 /* Now figure out which format our binary is */
638 if ((N_MAGIC(interp_ex) != OMAGIC) &&
639 (N_MAGIC(interp_ex) != ZMAGIC) &&
640 (N_MAGIC(interp_ex) != QMAGIC))
641 interpreter_type = INTERPRETER_ELF;
643 if (memcmp(interp_elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
644 interpreter_type &= ~INTERPRETER_ELF;
647 if (!interpreter_type)
648 goto out_free_dentry;
650 /* Make sure only one type was selected */
651 if ((interpreter_type & INTERPRETER_ELF) &&
652 interpreter_type != INTERPRETER_ELF) {
653 // FIXME - ratelimit this before re-enabling
654 // printk(KERN_WARNING "ELF: Ambiguous type, using ELF\n");
655 interpreter_type = INTERPRETER_ELF;
657 /* Verify the interpreter has a valid arch */
658 if ((interpreter_type == INTERPRETER_ELF) &&
659 !elf_check_arch(&interp_elf_ex))
660 goto out_free_dentry;
662 /* Executables without an interpreter also need a personality */
663 SET_PERSONALITY(elf_ex, ibcs2_interpreter);
666 /* OK, we are done with that, now set up the arg stuff,
667 and then start this sucker up */
669 if ((!bprm->sh_bang) && (interpreter_type == INTERPRETER_AOUT)) {
670 char *passed_p = passed_fileno;
671 sprintf(passed_fileno, "%d", elf_exec_fileno);
673 if (elf_interpreter) {
674 retval = copy_strings_kernel(1, &passed_p, bprm);
676 goto out_free_dentry;
681 /* Flush all traces of the currently running executable */
682 retval = flush_old_exec(bprm);
684 goto out_free_dentry;
686 /* Discard our unneeded old files struct */
689 put_files_struct(files);
693 /* OK, This is the point of no return */
694 current->mm->start_data = 0;
695 current->mm->end_data = 0;
696 current->mm->end_code = 0;
697 current->mm->mmap = NULL;
698 current->flags &= ~PF_FORKNOEXEC;
699 current->mm->def_flags = def_flags;
701 /* Do this immediately, since STACK_TOP as used in setup_arg_pages
702 may depend on the personality. */
703 SET_PERSONALITY(elf_ex, ibcs2_interpreter);
704 if (elf_read_implies_exec(elf_ex, have_pt_gnu_stack))
705 current->personality |= READ_IMPLIES_EXEC;
707 /* Do this so that we can load the interpreter, if need be. We will
708 change some of these later */
709 // current->mm->rss = 0;
710 vx_rsspages_sub(current->mm, current->mm->rss);
711 current->mm->free_area_cache = TASK_UNMAPPED_BASE;
712 retval = setup_arg_pages(bprm, executable_stack);
714 send_sig(SIGKILL, current, 0);
715 goto out_free_dentry;
718 current->mm->start_stack = bprm->p;
720 /* Now we do a little grungy work by mmaping the ELF image into
721 the correct location in memory. At this point, we assume that
722 the image should be loaded at fixed address, not at a variable
725 for(i = 0, elf_ppnt = elf_phdata; i < elf_ex.e_phnum; i++, elf_ppnt++) {
726 int elf_prot = 0, elf_flags;
727 unsigned long k, vaddr;
729 if (elf_ppnt->p_type != PT_LOAD)
732 if (unlikely (elf_brk > elf_bss)) {
735 /* There was a PT_LOAD segment with p_memsz > p_filesz
736 before this one. Map anonymous pages, if needed,
737 and clear the area. */
738 retval = set_brk (elf_bss + load_bias,
739 elf_brk + load_bias);
741 send_sig(SIGKILL, current, 0);
742 goto out_free_dentry;
744 nbyte = ELF_PAGEOFFSET(elf_bss);
746 nbyte = ELF_MIN_ALIGN - nbyte;
747 if (nbyte > elf_brk - elf_bss)
748 nbyte = elf_brk - elf_bss;
749 clear_user((void __user *) elf_bss + load_bias, nbyte);
753 if (elf_ppnt->p_flags & PF_R) elf_prot |= PROT_READ;
754 if (elf_ppnt->p_flags & PF_W) elf_prot |= PROT_WRITE;
755 if (elf_ppnt->p_flags & PF_X) elf_prot |= PROT_EXEC;
757 elf_flags = MAP_PRIVATE|MAP_DENYWRITE|MAP_EXECUTABLE;
759 vaddr = elf_ppnt->p_vaddr;
760 if (elf_ex.e_type == ET_EXEC || load_addr_set) {
761 elf_flags |= MAP_FIXED;
762 } else if (elf_ex.e_type == ET_DYN) {
763 /* Try and get dynamic programs out of the way of the default mmap
764 base, as well as whatever program they might try to exec. This
765 is because the brk will follow the loader, and is not movable. */
766 load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
769 error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, elf_prot, elf_flags);
773 if (!load_addr_set) {
775 load_addr = (elf_ppnt->p_vaddr - elf_ppnt->p_offset);
776 if (elf_ex.e_type == ET_DYN) {
778 ELF_PAGESTART(load_bias + vaddr);
779 load_addr += load_bias;
780 reloc_func_desc = load_bias;
783 k = elf_ppnt->p_vaddr;
784 if (k < start_code) start_code = k;
785 if (start_data < k) start_data = k;
788 * Check to see if the section's size will overflow the
789 * allowed task size. Note that p_filesz must always be
790 * <= p_memsz so it is only necessary to check p_memsz.
792 if (k > TASK_SIZE || elf_ppnt->p_filesz > elf_ppnt->p_memsz ||
793 elf_ppnt->p_memsz > TASK_SIZE ||
794 TASK_SIZE - elf_ppnt->p_memsz < k) {
795 /* set_brk can never work. Avoid overflows. */
796 send_sig(SIGKILL, current, 0);
797 goto out_free_dentry;
800 k = elf_ppnt->p_vaddr + elf_ppnt->p_filesz;
804 if ((elf_ppnt->p_flags & PF_X) && end_code < k)
808 k = elf_ppnt->p_vaddr + elf_ppnt->p_memsz;
813 elf_ex.e_entry += load_bias;
814 elf_bss += load_bias;
815 elf_brk += load_bias;
816 start_code += load_bias;
817 end_code += load_bias;
818 start_data += load_bias;
819 end_data += load_bias;
821 /* Calling set_brk effectively mmaps the pages that we need
822 * for the bss and break sections. We must do this before
823 * mapping in the interpreter, to make sure it doesn't wind
824 * up getting placed where the bss needs to go.
826 retval = set_brk(elf_bss, elf_brk);
828 send_sig(SIGKILL, current, 0);
829 goto out_free_dentry;
833 if (elf_interpreter) {
834 if (interpreter_type == INTERPRETER_AOUT)
835 elf_entry = load_aout_interp(&interp_ex,
838 elf_entry = load_elf_interp(&interp_elf_ex,
841 if (BAD_ADDR(elf_entry)) {
842 printk(KERN_ERR "Unable to load interpreter\n");
843 send_sig(SIGSEGV, current, 0);
844 retval = -ENOEXEC; /* Nobody gets to see this, but.. */
845 goto out_free_dentry;
847 reloc_func_desc = interp_load_addr;
849 allow_write_access(interpreter);
851 kfree(elf_interpreter);
853 elf_entry = elf_ex.e_entry;
858 if (interpreter_type != INTERPRETER_AOUT)
859 sys_close(elf_exec_fileno);
861 set_binfmt(&elf_format);
864 current->flags &= ~PF_FORKNOEXEC;
865 create_elf_tables(bprm, &elf_ex, (interpreter_type == INTERPRETER_AOUT),
866 load_addr, interp_load_addr);
867 /* N.B. passed_fileno might not be initialized? */
868 if (interpreter_type == INTERPRETER_AOUT)
869 current->mm->arg_start += strlen(passed_fileno) + 1;
870 current->mm->end_code = end_code;
871 current->mm->start_code = start_code;
872 current->mm->start_data = start_data;
873 current->mm->end_data = end_data;
874 current->mm->start_stack = bprm->p;
876 if (current->personality & MMAP_PAGE_ZERO) {
877 /* Why this, you ask??? Well SVr4 maps page 0 as read-only,
878 and some applications "depend" upon this behavior.
879 Since we do not have the power to recompile these, we
880 emulate the SVr4 behavior. Sigh. */
881 down_write(¤t->mm->mmap_sem);
882 error = do_mmap(NULL, 0, PAGE_SIZE, PROT_READ | PROT_EXEC,
883 MAP_FIXED | MAP_PRIVATE, 0);
884 up_write(¤t->mm->mmap_sem);
889 * The ABI may specify that certain registers be set up in special
890 * ways (on i386 %edx is the address of a DT_FINI function, for
891 * example. In addition, it may also specify (eg, PowerPC64 ELF)
892 * that the e_entry field is the address of the function descriptor
893 * for the startup routine, rather than the address of the startup
894 * routine itself. This macro performs whatever initialization to
895 * the regs structure is required as well as any relocations to the
896 * function descriptor entries when executing dynamically links apps.
898 ELF_PLAT_INIT(regs, reloc_func_desc);
901 start_thread(regs, elf_entry, bprm->p);
902 if (unlikely(current->ptrace & PT_PTRACED)) {
903 if (current->ptrace & PT_TRACE_EXEC)
904 ptrace_notify ((PTRACE_EVENT_EXEC << 8) | SIGTRAP);
906 send_sig(SIGTRAP, current, 0);
914 allow_write_access(interpreter);
919 kfree(elf_interpreter);
921 sys_close(elf_exec_fileno);
924 put_files_struct(current->files);
925 current->files = files;
932 /* This is really simpleminded and specialized - we are loading an
933 a.out library that is given an ELF header. */
935 static int load_elf_library(struct file *file)
937 struct elf_phdr *elf_phdata;
938 unsigned long elf_bss, bss, len;
939 int retval, error, i, j;
940 struct elfhdr elf_ex;
943 retval = kernel_read(file, 0, (char *) &elf_ex, sizeof(elf_ex));
944 if (retval != sizeof(elf_ex))
947 if (memcmp(elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
950 /* First of all, some simple consistency checks */
951 if (elf_ex.e_type != ET_EXEC || elf_ex.e_phnum > 2 ||
952 !elf_check_arch(&elf_ex) || !file->f_op || !file->f_op->mmap)
955 /* Now read in all of the header information */
957 j = sizeof(struct elf_phdr) * elf_ex.e_phnum;
958 /* j < ELF_MIN_ALIGN because elf_ex.e_phnum <= 2 */
961 elf_phdata = (struct elf_phdr *) kmalloc(j, GFP_KERNEL);
966 retval = kernel_read(file, elf_ex.e_phoff, (char *) elf_phdata, j);
970 for (j = 0, i = 0; i<elf_ex.e_phnum; i++)
971 if ((elf_phdata + i)->p_type == PT_LOAD) j++;
975 while (elf_phdata->p_type != PT_LOAD) elf_phdata++;
977 /* Now use mmap to map the library into memory. */
978 down_write(¤t->mm->mmap_sem);
979 error = do_mmap(file,
980 ELF_PAGESTART(elf_phdata->p_vaddr),
981 (elf_phdata->p_filesz +
982 ELF_PAGEOFFSET(elf_phdata->p_vaddr)),
983 PROT_READ | PROT_WRITE | PROT_EXEC,
984 MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE,
985 (elf_phdata->p_offset -
986 ELF_PAGEOFFSET(elf_phdata->p_vaddr)));
987 up_write(¤t->mm->mmap_sem);
988 if (error != ELF_PAGESTART(elf_phdata->p_vaddr))
991 elf_bss = elf_phdata->p_vaddr + elf_phdata->p_filesz;
994 len = ELF_PAGESTART(elf_phdata->p_filesz + elf_phdata->p_vaddr + ELF_MIN_ALIGN - 1);
995 bss = elf_phdata->p_memsz + elf_phdata->p_vaddr;
997 do_brk(len, bss - len);
1007 * Note that some platforms still use traditional core dumps and not
1008 * the ELF core dump. Each platform can select it as appropriate.
1010 #ifdef USE_ELF_CORE_DUMP
1015 * Modelled on fs/exec.c:aout_core_dump()
1016 * Jeremy Fitzhardinge <jeremy@sw.oz.au>
1019 * These are the only things you should do on a core-file: use only these
1020 * functions to write out all the necessary info.
1022 static int dump_write(struct file *file, const void *addr, int nr)
1024 return file->f_op->write(file, addr, nr, &file->f_pos) == nr;
1027 static int dump_seek(struct file *file, off_t off)
1029 if (file->f_op->llseek) {
1030 if (file->f_op->llseek(file, off, 0) != off)
1038 * Decide whether a segment is worth dumping; default is yes to be
1039 * sure (missing info is worse than too much; etc).
1040 * Personally I'd include everything, and use the coredump limit...
1042 * I think we should skip something. But I am not sure how. H.J.
1044 static int maydump(struct vm_area_struct *vma)
1047 * If we may not read the contents, don't allow us to dump
1048 * them either. "dump_write()" can't handle it anyway.
1050 if (!(vma->vm_flags & VM_READ))
1053 /* Do not dump I/O mapped devices! -DaveM */
1054 if (vma->vm_flags & VM_IO)
1057 if (vma->vm_flags & (VM_WRITE|VM_GROWSUP|VM_GROWSDOWN))
1059 if (vma->vm_flags & (VM_READ|VM_EXEC|VM_EXECUTABLE|VM_SHARED))
1065 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
1067 /* An ELF note in memory */
1072 unsigned int datasz;
1076 static int notesize(struct memelfnote *en)
1080 sz = sizeof(struct elf_note);
1081 sz += roundup(strlen(en->name) + 1, 4);
1082 sz += roundup(en->datasz, 4);
1087 #define DUMP_WRITE(addr, nr) \
1088 do { if (!dump_write(file, (addr), (nr))) return 0; } while(0)
1089 #define DUMP_SEEK(off) \
1090 do { if (!dump_seek(file, (off))) return 0; } while(0)
1092 static int writenote(struct memelfnote *men, struct file *file)
1096 en.n_namesz = strlen(men->name) + 1;
1097 en.n_descsz = men->datasz;
1098 en.n_type = men->type;
1100 DUMP_WRITE(&en, sizeof(en));
1101 DUMP_WRITE(men->name, en.n_namesz);
1102 /* XXX - cast from long long to long to avoid need for libgcc.a */
1103 DUMP_SEEK(roundup((unsigned long)file->f_pos, 4)); /* XXX */
1104 DUMP_WRITE(men->data, men->datasz);
1105 DUMP_SEEK(roundup((unsigned long)file->f_pos, 4)); /* XXX */
1112 #define DUMP_WRITE(addr, nr) \
1113 if ((size += (nr)) > limit || !dump_write(file, (addr), (nr))) \
1115 #define DUMP_SEEK(off) \
1116 if (!dump_seek(file, (off))) \
1119 static inline void fill_elf_header(struct elfhdr *elf, int segs)
1121 memcpy(elf->e_ident, ELFMAG, SELFMAG);
1122 elf->e_ident[EI_CLASS] = ELF_CLASS;
1123 elf->e_ident[EI_DATA] = ELF_DATA;
1124 elf->e_ident[EI_VERSION] = EV_CURRENT;
1125 elf->e_ident[EI_OSABI] = ELF_OSABI;
1126 memset(elf->e_ident+EI_PAD, 0, EI_NIDENT-EI_PAD);
1128 elf->e_type = ET_CORE;
1129 elf->e_machine = ELF_ARCH;
1130 elf->e_version = EV_CURRENT;
1132 elf->e_phoff = sizeof(struct elfhdr);
1135 elf->e_ehsize = sizeof(struct elfhdr);
1136 elf->e_phentsize = sizeof(struct elf_phdr);
1137 elf->e_phnum = segs;
1138 elf->e_shentsize = 0;
1140 elf->e_shstrndx = 0;
1144 static inline void fill_elf_note_phdr(struct elf_phdr *phdr, int sz, off_t offset)
1146 phdr->p_type = PT_NOTE;
1147 phdr->p_offset = offset;
1150 phdr->p_filesz = sz;
1157 static void fill_note(struct memelfnote *note, const char *name, int type,
1158 unsigned int sz, void *data)
1168 * fill up all the fields in prstatus from the given task struct, except registers
1169 * which need to be filled up separately.
1171 static void fill_prstatus(struct elf_prstatus *prstatus,
1172 struct task_struct *p, long signr)
1174 prstatus->pr_info.si_signo = prstatus->pr_cursig = signr;
1175 prstatus->pr_sigpend = p->pending.signal.sig[0];
1176 prstatus->pr_sighold = p->blocked.sig[0];
1177 prstatus->pr_pid = p->pid;
1178 prstatus->pr_ppid = p->parent->pid;
1179 prstatus->pr_pgrp = process_group(p);
1180 prstatus->pr_sid = p->signal->session;
1181 jiffies_to_timeval(p->utime, &prstatus->pr_utime);
1182 jiffies_to_timeval(p->stime, &prstatus->pr_stime);
1183 jiffies_to_timeval(p->cutime, &prstatus->pr_cutime);
1184 jiffies_to_timeval(p->cstime, &prstatus->pr_cstime);
1187 static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
1188 struct mm_struct *mm)
1192 /* first copy the parameters from user space */
1193 memset(psinfo, 0, sizeof(struct elf_prpsinfo));
1195 len = mm->arg_end - mm->arg_start;
1196 if (len >= ELF_PRARGSZ)
1197 len = ELF_PRARGSZ-1;
1198 copy_from_user(&psinfo->pr_psargs,
1199 (const char __user *)mm->arg_start, len);
1200 for(i = 0; i < len; i++)
1201 if (psinfo->pr_psargs[i] == 0)
1202 psinfo->pr_psargs[i] = ' ';
1203 psinfo->pr_psargs[len] = 0;
1205 psinfo->pr_pid = p->pid;
1206 psinfo->pr_ppid = p->parent->pid;
1207 psinfo->pr_pgrp = process_group(p);
1208 psinfo->pr_sid = p->signal->session;
1210 i = p->state ? ffz(~p->state) + 1 : 0;
1211 psinfo->pr_state = i;
1212 psinfo->pr_sname = (i < 0 || i > 5) ? '.' : "RSDTZW"[i];
1213 psinfo->pr_zomb = psinfo->pr_sname == 'Z';
1214 psinfo->pr_nice = task_nice(p);
1215 psinfo->pr_flag = p->flags;
1216 SET_UID(psinfo->pr_uid, p->uid);
1217 SET_GID(psinfo->pr_gid, p->gid);
1218 strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname));
1223 /* Here is the structure in which status of each thread is captured. */
1224 struct elf_thread_status
1226 struct list_head list;
1227 struct elf_prstatus prstatus; /* NT_PRSTATUS */
1228 elf_fpregset_t fpu; /* NT_PRFPREG */
1229 #ifdef ELF_CORE_COPY_XFPREGS
1230 elf_fpxregset_t xfpu; /* NT_PRXFPREG */
1232 struct memelfnote notes[3];
1237 * In order to add the specific thread information for the elf file format,
1238 * we need to keep a linked list of every threads pr_status and then
1239 * create a single section for them in the final core file.
1241 static int elf_dump_thread_status(long signr, struct task_struct * p, struct list_head * thread_list)
1244 struct elf_thread_status *t;
1247 t = kmalloc(sizeof(*t), GFP_ATOMIC);
1250 memset(t, 0, sizeof(*t));
1252 INIT_LIST_HEAD(&t->list);
1255 fill_prstatus(&t->prstatus, p, signr);
1256 elf_core_copy_task_regs(p, &t->prstatus.pr_reg);
1258 fill_note(&t->notes[0], "CORE", NT_PRSTATUS, sizeof(t->prstatus), &(t->prstatus));
1260 sz += notesize(&t->notes[0]);
1262 if ((t->prstatus.pr_fpvalid = elf_core_copy_task_fpregs(p, NULL, &t->fpu))) {
1263 fill_note(&t->notes[1], "CORE", NT_PRFPREG, sizeof(t->fpu), &(t->fpu));
1265 sz += notesize(&t->notes[1]);
1268 #ifdef ELF_CORE_COPY_XFPREGS
1269 if (elf_core_copy_task_xfpregs(p, &t->xfpu)) {
1270 fill_note(&t->notes[2], "LINUX", NT_PRXFPREG, sizeof(t->xfpu), &t->xfpu);
1272 sz += notesize(&t->notes[2]);
1275 list_add(&t->list, thread_list);
1282 * This is a two-pass process; first we find the offsets of the bits,
1283 * and then they are actually written out. If we run out of core limit
1286 static int elf_core_dump(long signr, struct pt_regs * regs, struct file * file)
1294 struct vm_area_struct *vma;
1295 struct elfhdr *elf = NULL;
1296 off_t offset = 0, dataoff;
1297 unsigned long limit = current->rlim[RLIMIT_CORE].rlim_cur;
1299 struct memelfnote *notes = NULL;
1300 struct elf_prstatus *prstatus = NULL; /* NT_PRSTATUS */
1301 struct elf_prpsinfo *psinfo = NULL; /* NT_PRPSINFO */
1302 struct task_struct *g, *p;
1303 LIST_HEAD(thread_list);
1304 struct list_head *t;
1305 elf_fpregset_t *fpu = NULL;
1306 #ifdef ELF_CORE_COPY_XFPREGS
1307 elf_fpxregset_t *xfpu = NULL;
1309 int thread_status_size = 0;
1313 * We no longer stop all VM operations.
1315 * This is because those proceses that could possibly change map_count or
1316 * the mmap / vma pages are now blocked in do_exit on current finishing
1319 * Only ptrace can touch these memory addresses, but it doesn't change
1320 * the map_count or the pages allocated. So no possibility of crashing
1321 * exists while dumping the mm->vm_next areas to the core file.
1324 /* alloc memory for large data structures: too large to be on stack */
1325 elf = kmalloc(sizeof(*elf), GFP_KERNEL);
1328 prstatus = kmalloc(sizeof(*prstatus), GFP_KERNEL);
1331 psinfo = kmalloc(sizeof(*psinfo), GFP_KERNEL);
1334 notes = kmalloc(NUM_NOTES * sizeof(struct memelfnote), GFP_KERNEL);
1337 fpu = kmalloc(sizeof(*fpu), GFP_KERNEL);
1340 #ifdef ELF_CORE_COPY_XFPREGS
1341 xfpu = kmalloc(sizeof(*xfpu), GFP_KERNEL);
1346 /* capture the status of all other threads */
1348 read_lock(&tasklist_lock);
1350 if (current->mm == p->mm && current != p) {
1351 int sz = elf_dump_thread_status(signr, p, &thread_list);
1353 read_unlock(&tasklist_lock);
1356 thread_status_size += sz;
1358 while_each_thread(g,p);
1359 read_unlock(&tasklist_lock);
1362 /* now collect the dump for the current */
1363 memset(prstatus, 0, sizeof(*prstatus));
1364 fill_prstatus(prstatus, current, signr);
1365 elf_core_copy_regs(&prstatus->pr_reg, regs);
1367 segs = current->mm->map_count;
1368 #ifdef ELF_CORE_EXTRA_PHDRS
1369 segs += ELF_CORE_EXTRA_PHDRS;
1373 fill_elf_header(elf, segs+1); /* including notes section */
1376 current->flags |= PF_DUMPCORE;
1379 * Set up the notes in similar form to SVR4 core dumps made
1380 * with info from their /proc.
1383 fill_note(notes +0, "CORE", NT_PRSTATUS, sizeof(*prstatus), prstatus);
1385 fill_psinfo(psinfo, current->group_leader, current->mm);
1386 fill_note(notes +1, "CORE", NT_PRPSINFO, sizeof(*psinfo), psinfo);
1388 fill_note(notes +2, "CORE", NT_TASKSTRUCT, sizeof(*current), current);
1392 auxv = (elf_addr_t *) current->mm->saved_auxv;
1397 while (auxv[i - 2] != AT_NULL);
1398 fill_note(¬es[numnote++], "CORE", NT_AUXV,
1399 i * sizeof (elf_addr_t), auxv);
1401 /* Try to dump the FPU. */
1402 if ((prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, regs, fpu)))
1403 fill_note(notes + numnote++,
1404 "CORE", NT_PRFPREG, sizeof(*fpu), fpu);
1405 #ifdef ELF_CORE_COPY_XFPREGS
1406 if (elf_core_copy_task_xfpregs(current, xfpu))
1407 fill_note(notes + numnote++,
1408 "LINUX", NT_PRXFPREG, sizeof(*xfpu), xfpu);
1414 DUMP_WRITE(elf, sizeof(*elf));
1415 offset += sizeof(*elf); /* Elf header */
1416 offset += (segs+1) * sizeof(struct elf_phdr); /* Program headers */
1418 /* Write notes phdr entry */
1420 struct elf_phdr phdr;
1423 for (i = 0; i < numnote; i++)
1424 sz += notesize(notes + i);
1426 sz += thread_status_size;
1428 fill_elf_note_phdr(&phdr, sz, offset);
1430 DUMP_WRITE(&phdr, sizeof(phdr));
1433 /* Page-align dumped data */
1434 dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE);
1436 /* Write program headers for segments dump */
1437 for (vma = current->mm->mmap; vma != NULL; vma = vma->vm_next) {
1438 struct elf_phdr phdr;
1441 sz = vma->vm_end - vma->vm_start;
1443 phdr.p_type = PT_LOAD;
1444 phdr.p_offset = offset;
1445 phdr.p_vaddr = vma->vm_start;
1447 phdr.p_filesz = maydump(vma) ? sz : 0;
1449 offset += phdr.p_filesz;
1450 phdr.p_flags = vma->vm_flags & VM_READ ? PF_R : 0;
1451 if (vma->vm_flags & VM_WRITE) phdr.p_flags |= PF_W;
1452 if (vma->vm_flags & VM_EXEC) phdr.p_flags |= PF_X;
1453 phdr.p_align = ELF_EXEC_PAGESIZE;
1455 DUMP_WRITE(&phdr, sizeof(phdr));
1458 #ifdef ELF_CORE_WRITE_EXTRA_PHDRS
1459 ELF_CORE_WRITE_EXTRA_PHDRS;
1462 /* write out the notes section */
1463 for (i = 0; i < numnote; i++)
1464 if (!writenote(notes + i, file))
1467 /* write out the thread status notes section */
1468 list_for_each(t, &thread_list) {
1469 struct elf_thread_status *tmp = list_entry(t, struct elf_thread_status, list);
1470 for (i = 0; i < tmp->num_notes; i++)
1471 if (!writenote(&tmp->notes[i], file))
1477 for (vma = current->mm->mmap; vma != NULL; vma = vma->vm_next) {
1483 for (addr = vma->vm_start;
1485 addr += PAGE_SIZE) {
1487 struct vm_area_struct *vma;
1489 if (get_user_pages(current, current->mm, addr, 1, 0, 1,
1490 &page, &vma) <= 0) {
1491 DUMP_SEEK (file->f_pos + PAGE_SIZE);
1493 if (page == ZERO_PAGE(addr)) {
1494 DUMP_SEEK (file->f_pos + PAGE_SIZE);
1497 flush_cache_page(vma, addr);
1499 if ((size += PAGE_SIZE) > limit ||
1500 !dump_write(file, kaddr,
1503 page_cache_release(page);
1508 page_cache_release(page);
1513 #ifdef ELF_CORE_WRITE_EXTRA_DATA
1514 ELF_CORE_WRITE_EXTRA_DATA;
1517 if ((off_t) file->f_pos != offset) {
1519 printk("elf_core_dump: file->f_pos (%ld) != offset (%ld)\n",
1520 (off_t) file->f_pos, offset);
1527 while(!list_empty(&thread_list)) {
1528 struct list_head *tmp = thread_list.next;
1530 kfree(list_entry(tmp, struct elf_thread_status, list));
1538 #ifdef ELF_CORE_COPY_XFPREGS
1545 #endif /* USE_ELF_CORE_DUMP */
1547 static int __init init_elf_binfmt(void)
1549 return register_binfmt(&elf_format);
1552 static void __exit exit_elf_binfmt(void)
1554 /* Remove the COFF and ELF loaders. */
1555 unregister_binfmt(&elf_format);
1558 core_initcall(init_elf_binfmt);
1559 module_exit(exit_elf_binfmt);
1560 MODULE_LICENSE("GPL");