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>
41 #include <asm/uaccess.h>
42 #include <asm/param.h>
43 #include <asm/pgalloc.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)(long)u_platform);
208 /* AT_NULL is zero; clear the rest too */
209 memset(&elf_info[ei_index], 0,
210 sizeof current->mm->saved_auxv - ei_index * sizeof elf_info[0]);
212 /* And advance past the AT_NULL entry. */
215 sp = STACK_ADD(p, ei_index);
217 items = (argc + 1) + (envc + 1);
219 items += 3; /* a.out interpreters require argv & envp too */
221 items += 1; /* ELF interpreters only put argc on the stack */
223 bprm->p = STACK_ROUND(sp, items);
225 /* Point sp at the lowest address on the stack */
226 #ifdef CONFIG_STACK_GROWSUP
227 sp = (elf_addr_t __user *)bprm->p - items - ei_index;
228 bprm->exec = (unsigned long) sp; /* XXX: PARISC HACK */
230 sp = (elf_addr_t __user *)bprm->p;
233 /* Now, let's put argc (and argv, envp if appropriate) on the stack */
234 __put_user(argc, sp++);
237 envp = argv + argc + 1;
238 __put_user((elf_addr_t)(long)argv, sp++);
239 __put_user((elf_addr_t)(long)envp, sp++);
242 envp = argv + argc + 1;
245 /* Populate argv and envp */
246 p = current->mm->arg_start;
249 __put_user((elf_addr_t)p, argv++);
250 len = strnlen_user((void __user *)p, PAGE_SIZE*MAX_ARG_PAGES);
251 if (!len || len > PAGE_SIZE*MAX_ARG_PAGES)
256 current->mm->arg_end = current->mm->env_start = p;
259 __put_user((elf_addr_t)p, envp++);
260 len = strnlen_user((void __user *)p, PAGE_SIZE*MAX_ARG_PAGES);
261 if (!len || len > PAGE_SIZE*MAX_ARG_PAGES)
266 current->mm->env_end = p;
268 /* Put the elf_info on the stack in the right place. */
269 sp = (elf_addr_t __user *)envp + 1;
270 copy_to_user(sp, elf_info, ei_index * sizeof(elf_addr_t));
275 static unsigned long elf_map(struct file *filep, unsigned long addr,
276 struct elf_phdr *eppnt, int prot, int type)
278 unsigned long map_addr;
280 down_write(¤t->mm->mmap_sem);
281 map_addr = do_mmap(filep, ELF_PAGESTART(addr),
282 eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr), prot, type,
283 eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr));
284 up_write(¤t->mm->mmap_sem);
288 #endif /* !elf_map */
290 /* This is much more generalized than the library routine read function,
291 so we keep this separate. Technically the library read function
292 is only provided so that we can read a.out libraries that have
295 static unsigned long load_elf_interp(struct elfhdr * interp_elf_ex,
296 struct file * interpreter,
297 unsigned long *interp_load_addr)
299 struct elf_phdr *elf_phdata;
300 struct elf_phdr *eppnt;
301 unsigned long load_addr = 0;
302 int load_addr_set = 0;
303 unsigned long last_bss = 0, elf_bss = 0;
304 unsigned long error = ~0UL;
307 /* First of all, some simple consistency checks */
308 if (interp_elf_ex->e_type != ET_EXEC &&
309 interp_elf_ex->e_type != ET_DYN)
311 if (!elf_check_arch(interp_elf_ex))
313 if (!interpreter->f_op || !interpreter->f_op->mmap)
317 * If the size of this structure has changed, then punt, since
318 * we will be doing the wrong thing.
320 if (interp_elf_ex->e_phentsize != sizeof(struct elf_phdr))
322 if (interp_elf_ex->e_phnum > 65536U / sizeof(struct elf_phdr))
325 /* Now read in all of the header information */
327 size = sizeof(struct elf_phdr) * interp_elf_ex->e_phnum;
328 if (size > ELF_MIN_ALIGN)
330 elf_phdata = (struct elf_phdr *) kmalloc(size, GFP_KERNEL);
334 retval = kernel_read(interpreter,interp_elf_ex->e_phoff,(char *)elf_phdata,size);
340 for (i=0; i<interp_elf_ex->e_phnum; i++, eppnt++) {
341 if (eppnt->p_type == PT_LOAD) {
342 int elf_type = MAP_PRIVATE | MAP_DENYWRITE;
344 unsigned long vaddr = 0;
345 unsigned long k, map_addr;
347 if (eppnt->p_flags & PF_R) elf_prot = PROT_READ;
348 if (eppnt->p_flags & PF_W) elf_prot |= PROT_WRITE;
349 if (eppnt->p_flags & PF_X) elf_prot |= PROT_EXEC;
350 vaddr = eppnt->p_vaddr;
351 if (interp_elf_ex->e_type == ET_EXEC || load_addr_set)
352 elf_type |= MAP_FIXED;
354 map_addr = elf_map(interpreter, load_addr + vaddr, eppnt, elf_prot, elf_type);
356 if (BAD_ADDR(map_addr))
359 if (!load_addr_set && interp_elf_ex->e_type == ET_DYN) {
360 load_addr = map_addr - ELF_PAGESTART(vaddr);
365 * Check to see if the section's size will overflow the
366 * allowed task size. Note that p_filesz must always be
367 * <= p_memsize so it is only necessary to check p_memsz.
369 k = load_addr + eppnt->p_vaddr;
370 if (k > TASK_SIZE || eppnt->p_filesz > eppnt->p_memsz ||
371 eppnt->p_memsz > TASK_SIZE || TASK_SIZE - eppnt->p_memsz < k) {
377 * Find the end of the file mapping for this phdr, and keep
378 * track of the largest address we see for this.
380 k = load_addr + eppnt->p_vaddr + eppnt->p_filesz;
385 * Do the same thing for the memory mapping - between
386 * elf_bss and last_bss is the bss section.
388 k = load_addr + eppnt->p_memsz + eppnt->p_vaddr;
395 * Now fill out the bss section. First pad the last page up
396 * to the page boundary, and then perform a mmap to make sure
397 * that there are zero-mapped pages up to and including the
401 elf_bss = ELF_PAGESTART(elf_bss + ELF_MIN_ALIGN - 1); /* What we have mapped so far */
403 /* Map the last of the bss segment */
404 if (last_bss > elf_bss) {
405 error = do_brk(elf_bss, last_bss - elf_bss);
410 *interp_load_addr = load_addr;
411 error = ((unsigned long) interp_elf_ex->e_entry) + load_addr;
419 static unsigned long load_aout_interp(struct exec * interp_ex,
420 struct file * interpreter)
422 unsigned long text_data, elf_entry = ~0UL;
426 current->mm->end_code = interp_ex->a_text;
427 text_data = interp_ex->a_text + interp_ex->a_data;
428 current->mm->end_data = text_data;
429 current->mm->brk = interp_ex->a_bss + text_data;
431 switch (N_MAGIC(*interp_ex)) {
434 addr = (char __user *)0;
438 offset = N_TXTOFF(*interp_ex);
439 addr = (char __user *) N_TXTADDR(*interp_ex);
445 do_brk(0, text_data);
446 if (!interpreter->f_op || !interpreter->f_op->read)
448 if (interpreter->f_op->read(interpreter, addr, text_data, &offset) < 0)
450 flush_icache_range((unsigned long)addr,
451 (unsigned long)addr + text_data);
453 do_brk(ELF_PAGESTART(text_data + ELF_MIN_ALIGN - 1),
455 elf_entry = interp_ex->a_entry;
462 * These are the functions used to load ELF style executables and shared
463 * libraries. There is no binary dependent code anywhere else.
466 #define INTERPRETER_NONE 0
467 #define INTERPRETER_AOUT 1
468 #define INTERPRETER_ELF 2
471 static int load_elf_binary(struct linux_binprm * bprm, struct pt_regs * regs)
473 struct file *interpreter = NULL; /* to shut gcc up */
474 unsigned long load_addr = 0, load_bias = 0;
475 int load_addr_set = 0;
476 char * elf_interpreter = NULL;
477 unsigned int interpreter_type = INTERPRETER_NONE;
478 unsigned char ibcs2_interpreter = 0;
480 struct elf_phdr * elf_ppnt, *elf_phdata;
481 unsigned long elf_bss, elf_brk;
485 unsigned long elf_entry, interp_load_addr = 0;
486 unsigned long start_code, end_code, start_data, end_data;
487 unsigned long reloc_func_desc = 0;
488 struct elfhdr elf_ex;
489 struct elfhdr interp_elf_ex;
490 struct exec interp_ex;
491 char passed_fileno[6];
492 struct files_struct *files;
493 int executable_stack = EXSTACK_DEFAULT;
495 /* Get the exec-header */
496 elf_ex = *((struct elfhdr *) bprm->buf);
499 /* First of all, some simple consistency checks */
500 if (memcmp(elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
503 if (elf_ex.e_type != ET_EXEC && elf_ex.e_type != ET_DYN)
505 if (!elf_check_arch(&elf_ex))
507 if (!bprm->file->f_op||!bprm->file->f_op->mmap)
510 /* Now read in all of the header information */
513 if (elf_ex.e_phentsize != sizeof(struct elf_phdr))
515 if (elf_ex.e_phnum > 65536U / sizeof(struct elf_phdr))
517 size = elf_ex.e_phnum * sizeof(struct elf_phdr);
518 elf_phdata = (struct elf_phdr *) kmalloc(size, GFP_KERNEL);
522 retval = kernel_read(bprm->file, elf_ex.e_phoff, (char *) elf_phdata, size);
526 files = current->files; /* Refcounted so ok */
527 retval = unshare_files();
530 if (files == current->files) {
531 put_files_struct(files);
535 /* exec will make our files private anyway, but for the a.out
536 loader stuff we need to do it earlier */
538 retval = get_unused_fd();
541 get_file(bprm->file);
542 fd_install(elf_exec_fileno = retval, bprm->file);
544 elf_ppnt = elf_phdata;
553 for (i = 0; i < elf_ex.e_phnum; i++) {
554 if (elf_ppnt->p_type == PT_INTERP) {
555 /* This is the program interpreter used for
556 * shared libraries - for now assume that this
557 * is an a.out format binary
561 if (elf_ppnt->p_filesz > PATH_MAX)
563 elf_interpreter = (char *) kmalloc(elf_ppnt->p_filesz,
565 if (!elf_interpreter)
568 retval = kernel_read(bprm->file, elf_ppnt->p_offset,
572 goto out_free_interp;
573 /* If the program interpreter is one of these two,
574 * then assume an iBCS2 image. Otherwise assume
575 * a native linux image.
577 if (strcmp(elf_interpreter,"/usr/lib/libc.so.1") == 0 ||
578 strcmp(elf_interpreter,"/usr/lib/ld.so.1") == 0)
579 ibcs2_interpreter = 1;
582 * The early SET_PERSONALITY here is so that the lookup
583 * for the interpreter happens in the namespace of the
584 * to-be-execed image. SET_PERSONALITY can select an
587 * However, SET_PERSONALITY is NOT allowed to switch
588 * this task into the new images's memory mapping
589 * policy - that is, TASK_SIZE must still evaluate to
590 * that which is appropriate to the execing application.
591 * This is because exit_mmap() needs to have TASK_SIZE
592 * evaluate to the size of the old image.
594 * So if (say) a 64-bit application is execing a 32-bit
595 * application it is the architecture's responsibility
596 * to defer changing the value of TASK_SIZE until the
597 * switch really is going to happen - do this in
598 * flush_thread(). - akpm
600 SET_PERSONALITY(elf_ex, ibcs2_interpreter);
602 interpreter = open_exec(elf_interpreter);
603 retval = PTR_ERR(interpreter);
604 if (IS_ERR(interpreter))
605 goto out_free_interp;
606 retval = kernel_read(interpreter, 0, bprm->buf, BINPRM_BUF_SIZE);
608 goto out_free_dentry;
610 /* Get the exec headers */
611 interp_ex = *((struct exec *) bprm->buf);
612 interp_elf_ex = *((struct elfhdr *) bprm->buf);
618 elf_ppnt = elf_phdata;
619 for (i = 0; i < elf_ex.e_phnum; i++, elf_ppnt++)
620 if (elf_ppnt->p_type == PT_GNU_STACK) {
621 if (elf_ppnt->p_flags & PF_X)
622 executable_stack = EXSTACK_ENABLE_X;
624 executable_stack = EXSTACK_DISABLE_X;
627 /* Some simple consistency checks for the interpreter */
628 if (elf_interpreter) {
629 interpreter_type = INTERPRETER_ELF | INTERPRETER_AOUT;
631 /* Now figure out which format our binary is */
632 if ((N_MAGIC(interp_ex) != OMAGIC) &&
633 (N_MAGIC(interp_ex) != ZMAGIC) &&
634 (N_MAGIC(interp_ex) != QMAGIC))
635 interpreter_type = INTERPRETER_ELF;
637 if (memcmp(interp_elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
638 interpreter_type &= ~INTERPRETER_ELF;
641 if (!interpreter_type)
642 goto out_free_dentry;
644 /* Make sure only one type was selected */
645 if ((interpreter_type & INTERPRETER_ELF) &&
646 interpreter_type != INTERPRETER_ELF) {
647 // FIXME - ratelimit this before re-enabling
648 // printk(KERN_WARNING "ELF: Ambiguous type, using ELF\n");
649 interpreter_type = INTERPRETER_ELF;
651 /* Verify the interpreter has a valid arch */
652 if ((interpreter_type == INTERPRETER_ELF) &&
653 !elf_check_arch(&interp_elf_ex))
654 goto out_free_dentry;
656 /* Executables without an interpreter also need a personality */
657 SET_PERSONALITY(elf_ex, ibcs2_interpreter);
660 /* OK, we are done with that, now set up the arg stuff,
661 and then start this sucker up */
663 if ((!bprm->sh_bang) && (interpreter_type == INTERPRETER_AOUT)) {
664 char *passed_p = passed_fileno;
665 sprintf(passed_fileno, "%d", elf_exec_fileno);
667 if (elf_interpreter) {
668 retval = copy_strings_kernel(1, &passed_p, bprm);
670 goto out_free_dentry;
675 /* Flush all traces of the currently running executable */
676 retval = flush_old_exec(bprm);
678 goto out_free_dentry;
680 /* Discard our unneeded old files struct */
683 put_files_struct(files);
687 /* OK, This is the point of no return */
688 current->mm->start_data = 0;
689 current->mm->end_data = 0;
690 current->mm->end_code = 0;
691 current->mm->mmap = NULL;
692 current->flags &= ~PF_FORKNOEXEC;
694 /* Do this immediately, since STACK_TOP as used in setup_arg_pages
695 may depend on the personality. */
696 SET_PERSONALITY(elf_ex, ibcs2_interpreter);
698 /* Do this so that we can load the interpreter, if need be. We will
699 change some of these later */
700 current->mm->rss = 0;
701 current->mm->free_area_cache = TASK_UNMAPPED_BASE;
702 retval = setup_arg_pages(bprm, executable_stack);
704 send_sig(SIGKILL, current, 0);
705 goto out_free_dentry;
708 current->mm->start_stack = bprm->p;
710 /* Now we do a little grungy work by mmaping the ELF image into
711 the correct location in memory. At this point, we assume that
712 the image should be loaded at fixed address, not at a variable
715 for(i = 0, elf_ppnt = elf_phdata; i < elf_ex.e_phnum; i++, elf_ppnt++) {
716 int elf_prot = 0, elf_flags;
717 unsigned long k, vaddr;
719 if (elf_ppnt->p_type != PT_LOAD)
722 if (unlikely (elf_brk > elf_bss)) {
725 /* There was a PT_LOAD segment with p_memsz > p_filesz
726 before this one. Map anonymous pages, if needed,
727 and clear the area. */
728 retval = set_brk (elf_bss + load_bias,
729 elf_brk + load_bias);
731 send_sig(SIGKILL, current, 0);
732 goto out_free_dentry;
734 nbyte = ELF_PAGEOFFSET(elf_bss);
736 nbyte = ELF_MIN_ALIGN - nbyte;
737 if (nbyte > elf_brk - elf_bss)
738 nbyte = elf_brk - elf_bss;
739 clear_user((void __user *) elf_bss + load_bias, nbyte);
743 if (elf_ppnt->p_flags & PF_R) elf_prot |= PROT_READ;
744 if (elf_ppnt->p_flags & PF_W) elf_prot |= PROT_WRITE;
745 if (elf_ppnt->p_flags & PF_X) elf_prot |= PROT_EXEC;
747 elf_flags = MAP_PRIVATE|MAP_DENYWRITE|MAP_EXECUTABLE;
749 vaddr = elf_ppnt->p_vaddr;
750 if (elf_ex.e_type == ET_EXEC || load_addr_set) {
751 elf_flags |= MAP_FIXED;
752 } else if (elf_ex.e_type == ET_DYN) {
753 /* Try and get dynamic programs out of the way of the default mmap
754 base, as well as whatever program they might try to exec. This
755 is because the brk will follow the loader, and is not movable. */
756 load_bias = ELF_PAGESTART(ELF_ET_DYN_BASE - vaddr);
759 error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt, elf_prot, elf_flags);
763 if (!load_addr_set) {
765 load_addr = (elf_ppnt->p_vaddr - elf_ppnt->p_offset);
766 if (elf_ex.e_type == ET_DYN) {
768 ELF_PAGESTART(load_bias + vaddr);
769 load_addr += load_bias;
770 reloc_func_desc = load_bias;
773 k = elf_ppnt->p_vaddr;
774 if (k < start_code) start_code = k;
775 if (start_data < k) start_data = k;
778 * Check to see if the section's size will overflow the
779 * allowed task size. Note that p_filesz must always be
780 * <= p_memsz so it is only necessary to check p_memsz.
782 if (k > TASK_SIZE || elf_ppnt->p_filesz > elf_ppnt->p_memsz ||
783 elf_ppnt->p_memsz > TASK_SIZE ||
784 TASK_SIZE - elf_ppnt->p_memsz < k) {
785 /* set_brk can never work. Avoid overflows. */
786 send_sig(SIGKILL, current, 0);
787 goto out_free_dentry;
790 k = elf_ppnt->p_vaddr + elf_ppnt->p_filesz;
794 if ((elf_ppnt->p_flags & PF_X) && end_code < k)
798 k = elf_ppnt->p_vaddr + elf_ppnt->p_memsz;
803 elf_ex.e_entry += load_bias;
804 elf_bss += load_bias;
805 elf_brk += load_bias;
806 start_code += load_bias;
807 end_code += load_bias;
808 start_data += load_bias;
809 end_data += load_bias;
811 /* Calling set_brk effectively mmaps the pages that we need
812 * for the bss and break sections. We must do this before
813 * mapping in the interpreter, to make sure it doesn't wind
814 * up getting placed where the bss needs to go.
816 retval = set_brk(elf_bss, elf_brk);
818 send_sig(SIGKILL, current, 0);
819 goto out_free_dentry;
823 if (elf_interpreter) {
824 if (interpreter_type == INTERPRETER_AOUT)
825 elf_entry = load_aout_interp(&interp_ex,
828 elf_entry = load_elf_interp(&interp_elf_ex,
831 if (BAD_ADDR(elf_entry)) {
832 printk(KERN_ERR "Unable to load interpreter\n");
833 send_sig(SIGSEGV, current, 0);
834 retval = -ENOEXEC; /* Nobody gets to see this, but.. */
835 goto out_free_dentry;
837 reloc_func_desc = interp_load_addr;
839 allow_write_access(interpreter);
841 kfree(elf_interpreter);
843 elf_entry = elf_ex.e_entry;
848 if (interpreter_type != INTERPRETER_AOUT)
849 sys_close(elf_exec_fileno);
851 set_binfmt(&elf_format);
854 current->flags &= ~PF_FORKNOEXEC;
855 create_elf_tables(bprm, &elf_ex, (interpreter_type == INTERPRETER_AOUT),
856 load_addr, interp_load_addr);
857 /* N.B. passed_fileno might not be initialized? */
858 if (interpreter_type == INTERPRETER_AOUT)
859 current->mm->arg_start += strlen(passed_fileno) + 1;
860 current->mm->end_code = end_code;
861 current->mm->start_code = start_code;
862 current->mm->start_data = start_data;
863 current->mm->end_data = end_data;
864 current->mm->start_stack = bprm->p;
866 if (current->personality & MMAP_PAGE_ZERO) {
867 /* Why this, you ask??? Well SVr4 maps page 0 as read-only,
868 and some applications "depend" upon this behavior.
869 Since we do not have the power to recompile these, we
870 emulate the SVr4 behavior. Sigh. */
871 down_write(¤t->mm->mmap_sem);
872 error = do_mmap(NULL, 0, PAGE_SIZE, PROT_READ | PROT_EXEC,
873 MAP_FIXED | MAP_PRIVATE, 0);
874 up_write(¤t->mm->mmap_sem);
879 * The ABI may specify that certain registers be set up in special
880 * ways (on i386 %edx is the address of a DT_FINI function, for
881 * example. In addition, it may also specify (eg, PowerPC64 ELF)
882 * that the e_entry field is the address of the function descriptor
883 * for the startup routine, rather than the address of the startup
884 * routine itself. This macro performs whatever initialization to
885 * the regs structure is required as well as any relocations to the
886 * function descriptor entries when executing dynamically links apps.
888 ELF_PLAT_INIT(regs, reloc_func_desc);
891 start_thread(regs, elf_entry, bprm->p);
892 if (unlikely(current->ptrace & PT_PTRACED)) {
893 if (current->ptrace & PT_TRACE_EXEC)
894 ptrace_notify ((PTRACE_EVENT_EXEC << 8) | SIGTRAP);
896 send_sig(SIGTRAP, current, 0);
904 allow_write_access(interpreter);
909 kfree(elf_interpreter);
911 sys_close(elf_exec_fileno);
914 put_files_struct(current->files);
915 current->files = files;
922 /* This is really simpleminded and specialized - we are loading an
923 a.out library that is given an ELF header. */
925 static int load_elf_library(struct file *file)
927 struct elf_phdr *elf_phdata;
928 unsigned long elf_bss, bss, len;
929 int retval, error, i, j;
930 struct elfhdr elf_ex;
933 retval = kernel_read(file, 0, (char *) &elf_ex, sizeof(elf_ex));
934 if (retval != sizeof(elf_ex))
937 if (memcmp(elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
940 /* First of all, some simple consistency checks */
941 if (elf_ex.e_type != ET_EXEC || elf_ex.e_phnum > 2 ||
942 !elf_check_arch(&elf_ex) || !file->f_op || !file->f_op->mmap)
945 /* Now read in all of the header information */
947 j = sizeof(struct elf_phdr) * elf_ex.e_phnum;
948 /* j < ELF_MIN_ALIGN because elf_ex.e_phnum <= 2 */
951 elf_phdata = (struct elf_phdr *) kmalloc(j, GFP_KERNEL);
956 retval = kernel_read(file, elf_ex.e_phoff, (char *) elf_phdata, j);
960 for (j = 0, i = 0; i<elf_ex.e_phnum; i++)
961 if ((elf_phdata + i)->p_type == PT_LOAD) j++;
965 while (elf_phdata->p_type != PT_LOAD) elf_phdata++;
967 /* Now use mmap to map the library into memory. */
968 down_write(¤t->mm->mmap_sem);
969 error = do_mmap(file,
970 ELF_PAGESTART(elf_phdata->p_vaddr),
971 (elf_phdata->p_filesz +
972 ELF_PAGEOFFSET(elf_phdata->p_vaddr)),
973 PROT_READ | PROT_WRITE | PROT_EXEC,
974 MAP_FIXED | MAP_PRIVATE | MAP_DENYWRITE,
975 (elf_phdata->p_offset -
976 ELF_PAGEOFFSET(elf_phdata->p_vaddr)));
977 up_write(¤t->mm->mmap_sem);
978 if (error != ELF_PAGESTART(elf_phdata->p_vaddr))
981 elf_bss = elf_phdata->p_vaddr + elf_phdata->p_filesz;
984 len = ELF_PAGESTART(elf_phdata->p_filesz + elf_phdata->p_vaddr + ELF_MIN_ALIGN - 1);
985 bss = elf_phdata->p_memsz + elf_phdata->p_vaddr;
987 do_brk(len, bss - len);
997 * Note that some platforms still use traditional core dumps and not
998 * the ELF core dump. Each platform can select it as appropriate.
1000 #ifdef USE_ELF_CORE_DUMP
1005 * Modelled on fs/exec.c:aout_core_dump()
1006 * Jeremy Fitzhardinge <jeremy@sw.oz.au>
1009 * These are the only things you should do on a core-file: use only these
1010 * functions to write out all the necessary info.
1012 static int dump_write(struct file *file, const void *addr, int nr)
1014 return file->f_op->write(file, addr, nr, &file->f_pos) == nr;
1017 static int dump_seek(struct file *file, off_t off)
1019 if (file->f_op->llseek) {
1020 if (file->f_op->llseek(file, off, 0) != off)
1028 * Decide whether a segment is worth dumping; default is yes to be
1029 * sure (missing info is worse than too much; etc).
1030 * Personally I'd include everything, and use the coredump limit...
1032 * I think we should skip something. But I am not sure how. H.J.
1034 static int maydump(struct vm_area_struct *vma)
1037 * If we may not read the contents, don't allow us to dump
1038 * them either. "dump_write()" can't handle it anyway.
1040 if (!(vma->vm_flags & VM_READ))
1043 /* Do not dump I/O mapped devices! -DaveM */
1044 if (vma->vm_flags & VM_IO)
1047 if (vma->vm_flags & (VM_WRITE|VM_GROWSUP|VM_GROWSDOWN))
1049 if (vma->vm_flags & (VM_READ|VM_EXEC|VM_EXECUTABLE|VM_SHARED))
1055 #define roundup(x, y) ((((x)+((y)-1))/(y))*(y))
1057 /* An ELF note in memory */
1062 unsigned int datasz;
1066 static int notesize(struct memelfnote *en)
1070 sz = sizeof(struct elf_note);
1071 sz += roundup(strlen(en->name) + 1, 4);
1072 sz += roundup(en->datasz, 4);
1077 #define DUMP_WRITE(addr, nr) \
1078 do { if (!dump_write(file, (addr), (nr))) return 0; } while(0)
1079 #define DUMP_SEEK(off) \
1080 do { if (!dump_seek(file, (off))) return 0; } while(0)
1082 static int writenote(struct memelfnote *men, struct file *file)
1086 en.n_namesz = strlen(men->name) + 1;
1087 en.n_descsz = men->datasz;
1088 en.n_type = men->type;
1090 DUMP_WRITE(&en, sizeof(en));
1091 DUMP_WRITE(men->name, en.n_namesz);
1092 /* XXX - cast from long long to long to avoid need for libgcc.a */
1093 DUMP_SEEK(roundup((unsigned long)file->f_pos, 4)); /* XXX */
1094 DUMP_WRITE(men->data, men->datasz);
1095 DUMP_SEEK(roundup((unsigned long)file->f_pos, 4)); /* XXX */
1102 #define DUMP_WRITE(addr, nr) \
1103 if ((size += (nr)) > limit || !dump_write(file, (addr), (nr))) \
1105 #define DUMP_SEEK(off) \
1106 if (!dump_seek(file, (off))) \
1109 static inline void fill_elf_header(struct elfhdr *elf, int segs)
1111 memcpy(elf->e_ident, ELFMAG, SELFMAG);
1112 elf->e_ident[EI_CLASS] = ELF_CLASS;
1113 elf->e_ident[EI_DATA] = ELF_DATA;
1114 elf->e_ident[EI_VERSION] = EV_CURRENT;
1115 elf->e_ident[EI_OSABI] = ELF_OSABI;
1116 memset(elf->e_ident+EI_PAD, 0, EI_NIDENT-EI_PAD);
1118 elf->e_type = ET_CORE;
1119 elf->e_machine = ELF_ARCH;
1120 elf->e_version = EV_CURRENT;
1122 elf->e_phoff = sizeof(struct elfhdr);
1125 elf->e_ehsize = sizeof(struct elfhdr);
1126 elf->e_phentsize = sizeof(struct elf_phdr);
1127 elf->e_phnum = segs;
1128 elf->e_shentsize = 0;
1130 elf->e_shstrndx = 0;
1134 static inline void fill_elf_note_phdr(struct elf_phdr *phdr, int sz, off_t offset)
1136 phdr->p_type = PT_NOTE;
1137 phdr->p_offset = offset;
1140 phdr->p_filesz = sz;
1147 static void fill_note(struct memelfnote *note, const char *name, int type,
1148 unsigned int sz, void *data)
1158 * fill up all the fields in prstatus from the given task struct, except registers
1159 * which need to be filled up separately.
1161 static void fill_prstatus(struct elf_prstatus *prstatus,
1162 struct task_struct *p, long signr)
1164 prstatus->pr_info.si_signo = prstatus->pr_cursig = signr;
1165 prstatus->pr_sigpend = p->pending.signal.sig[0];
1166 prstatus->pr_sighold = p->blocked.sig[0];
1167 prstatus->pr_pid = p->pid;
1168 prstatus->pr_ppid = p->parent->pid;
1169 prstatus->pr_pgrp = process_group(p);
1170 prstatus->pr_sid = p->signal->session;
1171 jiffies_to_timeval(p->utime, &prstatus->pr_utime);
1172 jiffies_to_timeval(p->stime, &prstatus->pr_stime);
1173 jiffies_to_timeval(p->cutime, &prstatus->pr_cutime);
1174 jiffies_to_timeval(p->cstime, &prstatus->pr_cstime);
1177 static void fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
1178 struct mm_struct *mm)
1182 /* first copy the parameters from user space */
1183 memset(psinfo, 0, sizeof(struct elf_prpsinfo));
1185 len = mm->arg_end - mm->arg_start;
1186 if (len >= ELF_PRARGSZ)
1187 len = ELF_PRARGSZ-1;
1188 copy_from_user(&psinfo->pr_psargs,
1189 (const char __user *)mm->arg_start, len);
1190 for(i = 0; i < len; i++)
1191 if (psinfo->pr_psargs[i] == 0)
1192 psinfo->pr_psargs[i] = ' ';
1193 psinfo->pr_psargs[len] = 0;
1195 psinfo->pr_pid = p->pid;
1196 psinfo->pr_ppid = p->parent->pid;
1197 psinfo->pr_pgrp = process_group(p);
1198 psinfo->pr_sid = p->signal->session;
1200 i = p->state ? ffz(~p->state) + 1 : 0;
1201 psinfo->pr_state = i;
1202 psinfo->pr_sname = (i < 0 || i > 5) ? '.' : "RSDTZW"[i];
1203 psinfo->pr_zomb = psinfo->pr_sname == 'Z';
1204 psinfo->pr_nice = task_nice(p);
1205 psinfo->pr_flag = p->flags;
1206 SET_UID(psinfo->pr_uid, p->uid);
1207 SET_GID(psinfo->pr_gid, p->gid);
1208 strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname));
1213 /* Here is the structure in which status of each thread is captured. */
1214 struct elf_thread_status
1216 struct list_head list;
1217 struct elf_prstatus prstatus; /* NT_PRSTATUS */
1218 elf_fpregset_t fpu; /* NT_PRFPREG */
1219 #ifdef ELF_CORE_COPY_XFPREGS
1220 elf_fpxregset_t xfpu; /* NT_PRXFPREG */
1222 struct memelfnote notes[3];
1227 * In order to add the specific thread information for the elf file format,
1228 * we need to keep a linked list of every threads pr_status and then
1229 * create a single section for them in the final core file.
1231 static int elf_dump_thread_status(long signr, struct task_struct * p, struct list_head * thread_list)
1234 struct elf_thread_status *t;
1237 t = kmalloc(sizeof(*t), GFP_ATOMIC);
1240 memset(t, 0, sizeof(*t));
1242 INIT_LIST_HEAD(&t->list);
1245 fill_prstatus(&t->prstatus, p, signr);
1246 elf_core_copy_task_regs(p, &t->prstatus.pr_reg);
1248 fill_note(&t->notes[0], "CORE", NT_PRSTATUS, sizeof(t->prstatus), &(t->prstatus));
1250 sz += notesize(&t->notes[0]);
1252 if ((t->prstatus.pr_fpvalid = elf_core_copy_task_fpregs(p, NULL, &t->fpu))) {
1253 fill_note(&t->notes[1], "CORE", NT_PRFPREG, sizeof(t->fpu), &(t->fpu));
1255 sz += notesize(&t->notes[1]);
1258 #ifdef ELF_CORE_COPY_XFPREGS
1259 if (elf_core_copy_task_xfpregs(p, &t->xfpu)) {
1260 fill_note(&t->notes[2], "LINUX", NT_PRXFPREG, sizeof(t->xfpu), &t->xfpu);
1262 sz += notesize(&t->notes[2]);
1265 list_add(&t->list, thread_list);
1272 * This is a two-pass process; first we find the offsets of the bits,
1273 * and then they are actually written out. If we run out of core limit
1276 static int elf_core_dump(long signr, struct pt_regs * regs, struct file * file)
1284 struct vm_area_struct *vma;
1285 struct elfhdr *elf = NULL;
1286 off_t offset = 0, dataoff;
1287 unsigned long limit = current->rlim[RLIMIT_CORE].rlim_cur;
1289 struct memelfnote *notes = NULL;
1290 struct elf_prstatus *prstatus = NULL; /* NT_PRSTATUS */
1291 struct elf_prpsinfo *psinfo = NULL; /* NT_PRPSINFO */
1292 struct task_struct *g, *p;
1293 LIST_HEAD(thread_list);
1294 struct list_head *t;
1295 elf_fpregset_t *fpu = NULL;
1296 #ifdef ELF_CORE_COPY_XFPREGS
1297 elf_fpxregset_t *xfpu = NULL;
1299 int thread_status_size = 0;
1303 * We no longer stop all VM operations.
1305 * This is because those proceses that could possibly change map_count or
1306 * the mmap / vma pages are now blocked in do_exit on current finishing
1309 * Only ptrace can touch these memory addresses, but it doesn't change
1310 * the map_count or the pages allocated. So no possibility of crashing
1311 * exists while dumping the mm->vm_next areas to the core file.
1314 /* alloc memory for large data structures: too large to be on stack */
1315 elf = kmalloc(sizeof(*elf), GFP_KERNEL);
1318 prstatus = kmalloc(sizeof(*prstatus), GFP_KERNEL);
1321 psinfo = kmalloc(sizeof(*psinfo), GFP_KERNEL);
1324 notes = kmalloc(NUM_NOTES * sizeof(struct memelfnote), GFP_KERNEL);
1327 fpu = kmalloc(sizeof(*fpu), GFP_KERNEL);
1330 #ifdef ELF_CORE_COPY_XFPREGS
1331 xfpu = kmalloc(sizeof(*xfpu), GFP_KERNEL);
1336 /* capture the status of all other threads */
1338 read_lock(&tasklist_lock);
1340 if (current->mm == p->mm && current != p) {
1341 int sz = elf_dump_thread_status(signr, p, &thread_list);
1343 read_unlock(&tasklist_lock);
1346 thread_status_size += sz;
1348 while_each_thread(g,p);
1349 read_unlock(&tasklist_lock);
1352 /* now collect the dump for the current */
1353 memset(prstatus, 0, sizeof(*prstatus));
1354 fill_prstatus(prstatus, current, signr);
1355 elf_core_copy_regs(&prstatus->pr_reg, regs);
1357 segs = current->mm->map_count;
1358 #ifdef ELF_CORE_EXTRA_PHDRS
1359 segs += ELF_CORE_EXTRA_PHDRS;
1363 fill_elf_header(elf, segs+1); /* including notes section */
1366 current->flags |= PF_DUMPCORE;
1369 * Set up the notes in similar form to SVR4 core dumps made
1370 * with info from their /proc.
1373 fill_note(notes +0, "CORE", NT_PRSTATUS, sizeof(*prstatus), prstatus);
1375 fill_psinfo(psinfo, current->group_leader, current->mm);
1376 fill_note(notes +1, "CORE", NT_PRPSINFO, sizeof(*psinfo), psinfo);
1378 fill_note(notes +2, "CORE", NT_TASKSTRUCT, sizeof(*current), current);
1382 auxv = (elf_addr_t *) current->mm->saved_auxv;
1387 while (auxv[i - 2] != AT_NULL);
1388 fill_note(¬es[numnote++], "CORE", NT_AUXV,
1389 i * sizeof (elf_addr_t), auxv);
1391 /* Try to dump the FPU. */
1392 if ((prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, regs, fpu)))
1393 fill_note(notes + numnote++,
1394 "CORE", NT_PRFPREG, sizeof(*fpu), fpu);
1395 #ifdef ELF_CORE_COPY_XFPREGS
1396 if (elf_core_copy_task_xfpregs(current, xfpu))
1397 fill_note(notes + numnote++,
1398 "LINUX", NT_PRXFPREG, sizeof(*xfpu), xfpu);
1404 DUMP_WRITE(elf, sizeof(*elf));
1405 offset += sizeof(*elf); /* Elf header */
1406 offset += (segs+1) * sizeof(struct elf_phdr); /* Program headers */
1408 /* Write notes phdr entry */
1410 struct elf_phdr phdr;
1413 for (i = 0; i < numnote; i++)
1414 sz += notesize(notes + i);
1416 sz += thread_status_size;
1418 fill_elf_note_phdr(&phdr, sz, offset);
1420 DUMP_WRITE(&phdr, sizeof(phdr));
1423 /* Page-align dumped data */
1424 dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE);
1426 /* Write program headers for segments dump */
1427 for (vma = current->mm->mmap; vma != NULL; vma = vma->vm_next) {
1428 struct elf_phdr phdr;
1431 sz = vma->vm_end - vma->vm_start;
1433 phdr.p_type = PT_LOAD;
1434 phdr.p_offset = offset;
1435 phdr.p_vaddr = vma->vm_start;
1437 phdr.p_filesz = maydump(vma) ? sz : 0;
1439 offset += phdr.p_filesz;
1440 phdr.p_flags = vma->vm_flags & VM_READ ? PF_R : 0;
1441 if (vma->vm_flags & VM_WRITE) phdr.p_flags |= PF_W;
1442 if (vma->vm_flags & VM_EXEC) phdr.p_flags |= PF_X;
1443 phdr.p_align = ELF_EXEC_PAGESIZE;
1445 DUMP_WRITE(&phdr, sizeof(phdr));
1448 #ifdef ELF_CORE_WRITE_EXTRA_PHDRS
1449 ELF_CORE_WRITE_EXTRA_PHDRS;
1452 /* write out the notes section */
1453 for (i = 0; i < numnote; i++)
1454 if (!writenote(notes + i, file))
1457 /* write out the thread status notes section */
1458 list_for_each(t, &thread_list) {
1459 struct elf_thread_status *tmp = list_entry(t, struct elf_thread_status, list);
1460 for (i = 0; i < tmp->num_notes; i++)
1461 if (!writenote(&tmp->notes[i], file))
1467 for (vma = current->mm->mmap; vma != NULL; vma = vma->vm_next) {
1473 for (addr = vma->vm_start;
1475 addr += PAGE_SIZE) {
1477 struct vm_area_struct *vma;
1479 if (get_user_pages(current, current->mm, addr, 1, 0, 1,
1480 &page, &vma) <= 0) {
1481 DUMP_SEEK (file->f_pos + PAGE_SIZE);
1483 if (page == ZERO_PAGE(addr)) {
1484 DUMP_SEEK (file->f_pos + PAGE_SIZE);
1487 flush_cache_page(vma, addr);
1489 if ((size += PAGE_SIZE) > limit ||
1490 !dump_write(file, kaddr,
1493 page_cache_release(page);
1498 page_cache_release(page);
1503 #ifdef ELF_CORE_WRITE_EXTRA_DATA
1504 ELF_CORE_WRITE_EXTRA_DATA;
1507 if ((off_t) file->f_pos != offset) {
1509 printk("elf_core_dump: file->f_pos (%ld) != offset (%ld)\n",
1510 (off_t) file->f_pos, offset);
1517 while(!list_empty(&thread_list)) {
1518 struct list_head *tmp = thread_list.next;
1520 kfree(list_entry(tmp, struct elf_thread_status, list));
1528 #ifdef ELF_CORE_COPY_XFPREGS
1535 #endif /* USE_ELF_CORE_DUMP */
1537 static int __init init_elf_binfmt(void)
1539 return register_binfmt(&elf_format);
1542 static void __exit exit_elf_binfmt(void)
1544 /* Remove the COFF and ELF loaders. */
1545 unregister_binfmt(&elf_format);
1548 core_initcall(init_elf_binfmt);
1549 module_exit(exit_elf_binfmt);
1550 MODULE_LICENSE("GPL");