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/compiler.h>
35 #include <linux/highmem.h>
36 #include <linux/pagemap.h>
37 #include <linux/security.h>
38 #include <linux/syscalls.h>
39 #include <linux/random.h>
40 #include <linux/elf.h>
41 #include <linux/utsname.h>
42 #include <asm/uaccess.h>
43 #include <asm/param.h>
46 static int load_elf_binary(struct linux_binprm
*bprm
, struct pt_regs
*regs
);
47 static int load_elf_library(struct file
*);
48 static unsigned long elf_map (struct file
*, unsigned long, struct elf_phdr
*, int, int);
51 * If we don't support core dumping, then supply a NULL so we
54 #if defined(USE_ELF_CORE_DUMP) && defined(CONFIG_ELF_CORE)
55 static int elf_core_dump(long signr
, struct pt_regs
*regs
, struct file
*file
, unsigned long limit
);
57 #define elf_core_dump NULL
60 #if ELF_EXEC_PAGESIZE > PAGE_SIZE
61 #define ELF_MIN_ALIGN ELF_EXEC_PAGESIZE
63 #define ELF_MIN_ALIGN PAGE_SIZE
66 #ifndef ELF_CORE_EFLAGS
67 #define ELF_CORE_EFLAGS 0
70 #define ELF_PAGESTART(_v) ((_v) & ~(unsigned long)(ELF_MIN_ALIGN-1))
71 #define ELF_PAGEOFFSET(_v) ((_v) & (ELF_MIN_ALIGN-1))
72 #define ELF_PAGEALIGN(_v) (((_v) + ELF_MIN_ALIGN - 1) & ~(ELF_MIN_ALIGN - 1))
74 static struct linux_binfmt elf_format
= {
75 .module
= THIS_MODULE
,
76 .load_binary
= load_elf_binary
,
77 .load_shlib
= load_elf_library
,
78 .core_dump
= elf_core_dump
,
79 .min_coredump
= ELF_EXEC_PAGESIZE
,
83 #define BAD_ADDR(x) ((unsigned long)(x) >= TASK_SIZE)
85 static int set_brk(unsigned long start
, unsigned long end
)
87 start
= ELF_PAGEALIGN(start
);
88 end
= ELF_PAGEALIGN(end
);
91 down_write(¤t
->mm
->mmap_sem
);
92 addr
= do_brk(start
, end
- start
);
93 up_write(¤t
->mm
->mmap_sem
);
97 current
->mm
->start_brk
= current
->mm
->brk
= end
;
101 /* We need to explicitly zero any fractional pages
102 after the data section (i.e. bss). This would
103 contain the junk from the file that should not
106 static int padzero(unsigned long elf_bss
)
110 nbyte
= ELF_PAGEOFFSET(elf_bss
);
112 nbyte
= ELF_MIN_ALIGN
- nbyte
;
113 if (clear_user((void __user
*) elf_bss
, nbyte
))
119 /* Let's use some macros to make this stack manipulation a litle clearer */
120 #ifdef CONFIG_STACK_GROWSUP
121 #define STACK_ADD(sp, items) ((elf_addr_t __user *)(sp) + (items))
122 #define STACK_ROUND(sp, items) \
123 ((15 + (unsigned long) ((sp) + (items))) &~ 15UL)
124 #define STACK_ALLOC(sp, len) ({ \
125 elf_addr_t __user *old_sp = (elf_addr_t __user *)sp; sp += len; \
128 #define STACK_ADD(sp, items) ((elf_addr_t __user *)(sp) - (items))
129 #define STACK_ROUND(sp, items) \
130 (((unsigned long) (sp - items)) &~ 15UL)
131 #define STACK_ALLOC(sp, len) ({ sp -= len ; sp; })
135 create_elf_tables(struct linux_binprm
*bprm
, struct elfhdr
*exec
,
136 int interp_aout
, unsigned long load_addr
,
137 unsigned long interp_load_addr
)
139 unsigned long p
= bprm
->p
;
140 int argc
= bprm
->argc
;
141 int envc
= bprm
->envc
;
142 elf_addr_t __user
*argv
;
143 elf_addr_t __user
*envp
;
144 elf_addr_t __user
*sp
;
145 elf_addr_t __user
*u_platform
;
146 const char *k_platform
= ELF_PLATFORM
;
148 elf_addr_t
*elf_info
;
150 struct task_struct
*tsk
= current
;
151 struct vm_area_struct
*vma
;
154 * If this architecture has a platform capability string, copy it
155 * to userspace. In some cases (Sparc), this info is impossible
156 * for userspace to get any other way, in others (i386) it is
161 size_t len
= strlen(k_platform
) + 1;
164 * In some cases (e.g. Hyper-Threading), we want to avoid L1
165 * evictions by the processes running on the same package. One
166 * thing we can do is to shuffle the initial stack for them.
169 p
= arch_align_stack(p
);
171 u_platform
= (elf_addr_t __user
*)STACK_ALLOC(p
, len
);
172 if (__copy_to_user(u_platform
, k_platform
, len
))
176 /* Create the ELF interpreter info */
177 elf_info
= (elf_addr_t
*)current
->mm
->saved_auxv
;
178 #define NEW_AUX_ENT(id, val) \
180 elf_info[ei_index++] = id; \
181 elf_info[ei_index++] = val; \
186 * ARCH_DLINFO must come first so PPC can do its special alignment of
191 NEW_AUX_ENT(AT_HWCAP
, ELF_HWCAP
);
192 NEW_AUX_ENT(AT_PAGESZ
, ELF_EXEC_PAGESIZE
);
193 NEW_AUX_ENT(AT_CLKTCK
, CLOCKS_PER_SEC
);
194 NEW_AUX_ENT(AT_PHDR
, load_addr
+ exec
->e_phoff
);
195 NEW_AUX_ENT(AT_PHENT
, sizeof(struct elf_phdr
));
196 NEW_AUX_ENT(AT_PHNUM
, exec
->e_phnum
);
197 NEW_AUX_ENT(AT_BASE
, interp_load_addr
);
198 NEW_AUX_ENT(AT_FLAGS
, 0);
199 NEW_AUX_ENT(AT_ENTRY
, exec
->e_entry
);
200 NEW_AUX_ENT(AT_UID
, tsk
->uid
);
201 NEW_AUX_ENT(AT_EUID
, tsk
->euid
);
202 NEW_AUX_ENT(AT_GID
, tsk
->gid
);
203 NEW_AUX_ENT(AT_EGID
, tsk
->egid
);
204 NEW_AUX_ENT(AT_SECURE
, security_bprm_secureexec(bprm
));
206 NEW_AUX_ENT(AT_PLATFORM
,
207 (elf_addr_t
)(unsigned long)u_platform
);
209 if (bprm
->interp_flags
& BINPRM_FLAGS_EXECFD
) {
210 NEW_AUX_ENT(AT_EXECFD
, bprm
->interp_data
);
213 /* AT_NULL is zero; clear the rest too */
214 memset(&elf_info
[ei_index
], 0,
215 sizeof current
->mm
->saved_auxv
- ei_index
* sizeof elf_info
[0]);
217 /* And advance past the AT_NULL entry. */
220 sp
= STACK_ADD(p
, ei_index
);
222 items
= (argc
+ 1) + (envc
+ 1);
224 items
+= 3; /* a.out interpreters require argv & envp too */
226 items
+= 1; /* ELF interpreters only put argc on the stack */
228 bprm
->p
= STACK_ROUND(sp
, items
);
230 /* Point sp at the lowest address on the stack */
231 #ifdef CONFIG_STACK_GROWSUP
232 sp
= (elf_addr_t __user
*)bprm
->p
- items
- ei_index
;
233 bprm
->exec
= (unsigned long)sp
; /* XXX: PARISC HACK */
235 sp
= (elf_addr_t __user
*)bprm
->p
;
240 * Grow the stack manually; some architectures have a limit on how
241 * far ahead a user-space access may be in order to grow the stack.
243 vma
= find_extend_vma(current
->mm
, bprm
->p
);
247 /* Now, let's put argc (and argv, envp if appropriate) on the stack */
248 if (__put_user(argc
, sp
++))
252 envp
= argv
+ argc
+ 1;
253 if (__put_user((elf_addr_t
)(unsigned long)argv
, sp
++) ||
254 __put_user((elf_addr_t
)(unsigned long)envp
, sp
++))
258 envp
= argv
+ argc
+ 1;
261 /* Populate argv and envp */
262 p
= current
->mm
->arg_end
= current
->mm
->arg_start
;
265 if (__put_user((elf_addr_t
)p
, argv
++))
267 len
= strnlen_user((void __user
*)p
, MAX_ARG_STRLEN
);
268 if (!len
|| len
> MAX_ARG_STRLEN
)
272 if (__put_user(0, argv
))
274 current
->mm
->arg_end
= current
->mm
->env_start
= p
;
277 if (__put_user((elf_addr_t
)p
, envp
++))
279 len
= strnlen_user((void __user
*)p
, MAX_ARG_STRLEN
);
280 if (!len
|| len
> MAX_ARG_STRLEN
)
284 if (__put_user(0, envp
))
286 current
->mm
->env_end
= p
;
288 /* Put the elf_info on the stack in the right place. */
289 sp
= (elf_addr_t __user
*)envp
+ 1;
290 if (copy_to_user(sp
, elf_info
, ei_index
* sizeof(elf_addr_t
)))
297 static unsigned long elf_map(struct file
*filep
, unsigned long addr
,
298 struct elf_phdr
*eppnt
, int prot
, int type
)
300 unsigned long map_addr
;
301 unsigned long pageoffset
= ELF_PAGEOFFSET(eppnt
->p_vaddr
);
303 down_write(¤t
->mm
->mmap_sem
);
304 /* mmap() will return -EINVAL if given a zero size, but a
305 * segment with zero filesize is perfectly valid */
306 if (eppnt
->p_filesz
+ pageoffset
)
307 map_addr
= do_mmap(filep
, ELF_PAGESTART(addr
),
308 eppnt
->p_filesz
+ pageoffset
, prot
, type
,
309 eppnt
->p_offset
- pageoffset
);
311 map_addr
= ELF_PAGESTART(addr
);
312 up_write(¤t
->mm
->mmap_sem
);
316 #endif /* !elf_map */
318 /* This is much more generalized than the library routine read function,
319 so we keep this separate. Technically the library read function
320 is only provided so that we can read a.out libraries that have
323 static unsigned long load_elf_interp(struct elfhdr
*interp_elf_ex
,
324 struct file
*interpreter
, unsigned long *interp_load_addr
)
326 struct elf_phdr
*elf_phdata
;
327 struct elf_phdr
*eppnt
;
328 unsigned long load_addr
= 0;
329 int load_addr_set
= 0;
330 unsigned long last_bss
= 0, elf_bss
= 0;
331 unsigned long error
= ~0UL;
334 /* First of all, some simple consistency checks */
335 if (interp_elf_ex
->e_type
!= ET_EXEC
&&
336 interp_elf_ex
->e_type
!= ET_DYN
)
338 if (!elf_check_arch(interp_elf_ex
))
340 if (!interpreter
->f_op
|| !interpreter
->f_op
->mmap
)
344 * If the size of this structure has changed, then punt, since
345 * we will be doing the wrong thing.
347 if (interp_elf_ex
->e_phentsize
!= sizeof(struct elf_phdr
))
349 if (interp_elf_ex
->e_phnum
< 1 ||
350 interp_elf_ex
->e_phnum
> 65536U / sizeof(struct elf_phdr
))
353 /* Now read in all of the header information */
354 size
= sizeof(struct elf_phdr
) * interp_elf_ex
->e_phnum
;
355 if (size
> ELF_MIN_ALIGN
)
357 elf_phdata
= kmalloc(size
, GFP_KERNEL
);
361 retval
= kernel_read(interpreter
, interp_elf_ex
->e_phoff
,
362 (char *)elf_phdata
,size
);
364 if (retval
!= size
) {
371 for (i
= 0; i
< interp_elf_ex
->e_phnum
; i
++, eppnt
++) {
372 if (eppnt
->p_type
== PT_LOAD
) {
373 int elf_type
= MAP_PRIVATE
| MAP_DENYWRITE
;
375 unsigned long vaddr
= 0;
376 unsigned long k
, map_addr
;
378 if (eppnt
->p_flags
& PF_R
)
379 elf_prot
= PROT_READ
;
380 if (eppnt
->p_flags
& PF_W
)
381 elf_prot
|= PROT_WRITE
;
382 if (eppnt
->p_flags
& PF_X
)
383 elf_prot
|= PROT_EXEC
;
384 vaddr
= eppnt
->p_vaddr
;
385 if (interp_elf_ex
->e_type
== ET_EXEC
|| load_addr_set
)
386 elf_type
|= MAP_FIXED
;
388 map_addr
= elf_map(interpreter
, load_addr
+ vaddr
,
389 eppnt
, elf_prot
, elf_type
);
391 if (BAD_ADDR(map_addr
))
394 if (!load_addr_set
&&
395 interp_elf_ex
->e_type
== ET_DYN
) {
396 load_addr
= map_addr
- ELF_PAGESTART(vaddr
);
401 * Check to see if the section's size will overflow the
402 * allowed task size. Note that p_filesz must always be
403 * <= p_memsize so it's only necessary to check p_memsz.
405 k
= load_addr
+ eppnt
->p_vaddr
;
407 eppnt
->p_filesz
> eppnt
->p_memsz
||
408 eppnt
->p_memsz
> TASK_SIZE
||
409 TASK_SIZE
- eppnt
->p_memsz
< k
) {
415 * Find the end of the file mapping for this phdr, and
416 * keep track of the largest address we see for this.
418 k
= load_addr
+ eppnt
->p_vaddr
+ eppnt
->p_filesz
;
423 * Do the same thing for the memory mapping - between
424 * elf_bss and last_bss is the bss section.
426 k
= load_addr
+ eppnt
->p_memsz
+ eppnt
->p_vaddr
;
433 * Now fill out the bss section. First pad the last page up
434 * to the page boundary, and then perform a mmap to make sure
435 * that there are zero-mapped pages up to and including the
438 if (padzero(elf_bss
)) {
443 /* What we have mapped so far */
444 elf_bss
= ELF_PAGESTART(elf_bss
+ ELF_MIN_ALIGN
- 1);
446 /* Map the last of the bss segment */
447 if (last_bss
> elf_bss
) {
448 down_write(¤t
->mm
->mmap_sem
);
449 error
= do_brk(elf_bss
, last_bss
- elf_bss
);
450 up_write(¤t
->mm
->mmap_sem
);
455 *interp_load_addr
= load_addr
;
456 error
= ((unsigned long)interp_elf_ex
->e_entry
) + load_addr
;
464 static unsigned long load_aout_interp(struct exec
*interp_ex
,
465 struct file
*interpreter
)
467 unsigned long text_data
, elf_entry
= ~0UL;
471 current
->mm
->end_code
= interp_ex
->a_text
;
472 text_data
= interp_ex
->a_text
+ interp_ex
->a_data
;
473 current
->mm
->end_data
= text_data
;
474 current
->mm
->brk
= interp_ex
->a_bss
+ text_data
;
476 switch (N_MAGIC(*interp_ex
)) {
479 addr
= (char __user
*)0;
483 offset
= N_TXTOFF(*interp_ex
);
484 addr
= (char __user
*)N_TXTADDR(*interp_ex
);
490 down_write(¤t
->mm
->mmap_sem
);
491 do_brk(0, text_data
);
492 up_write(¤t
->mm
->mmap_sem
);
493 if (!interpreter
->f_op
|| !interpreter
->f_op
->read
)
495 if (interpreter
->f_op
->read(interpreter
, addr
, text_data
, &offset
) < 0)
497 flush_icache_range((unsigned long)addr
,
498 (unsigned long)addr
+ text_data
);
500 down_write(¤t
->mm
->mmap_sem
);
501 do_brk(ELF_PAGESTART(text_data
+ ELF_MIN_ALIGN
- 1),
503 up_write(¤t
->mm
->mmap_sem
);
504 elf_entry
= interp_ex
->a_entry
;
511 * These are the functions used to load ELF style executables and shared
512 * libraries. There is no binary dependent code anywhere else.
515 #define INTERPRETER_NONE 0
516 #define INTERPRETER_AOUT 1
517 #define INTERPRETER_ELF 2
519 #ifndef STACK_RND_MASK
520 #define STACK_RND_MASK (0x7ff >> (PAGE_SHIFT - 12)) /* 8MB of VA */
523 static unsigned long randomize_stack_top(unsigned long stack_top
)
525 unsigned int random_variable
= 0;
527 if ((current
->flags
& PF_RANDOMIZE
) &&
528 !(current
->personality
& ADDR_NO_RANDOMIZE
)) {
529 random_variable
= get_random_int() & STACK_RND_MASK
;
530 random_variable
<<= PAGE_SHIFT
;
532 #ifdef CONFIG_STACK_GROWSUP
533 return PAGE_ALIGN(stack_top
) + random_variable
;
535 return PAGE_ALIGN(stack_top
) - random_variable
;
539 static int load_elf_binary(struct linux_binprm
*bprm
, struct pt_regs
*regs
)
541 struct file
*interpreter
= NULL
; /* to shut gcc up */
542 unsigned long load_addr
= 0, load_bias
= 0;
543 int load_addr_set
= 0;
544 char * elf_interpreter
= NULL
;
545 unsigned int interpreter_type
= INTERPRETER_NONE
;
546 unsigned char ibcs2_interpreter
= 0;
548 struct elf_phdr
*elf_ppnt
, *elf_phdata
;
549 unsigned long elf_bss
, elf_brk
;
553 unsigned long elf_entry
, interp_load_addr
= 0;
554 unsigned long start_code
, end_code
, start_data
, end_data
;
555 unsigned long reloc_func_desc
= 0;
556 char passed_fileno
[6];
557 struct files_struct
*files
;
558 int executable_stack
= EXSTACK_DEFAULT
;
559 unsigned long def_flags
= 0;
561 struct elfhdr elf_ex
;
562 struct elfhdr interp_elf_ex
;
563 struct exec interp_ex
;
566 loc
= kmalloc(sizeof(*loc
), GFP_KERNEL
);
572 /* Get the exec-header */
573 loc
->elf_ex
= *((struct elfhdr
*)bprm
->buf
);
576 /* First of all, some simple consistency checks */
577 if (memcmp(loc
->elf_ex
.e_ident
, ELFMAG
, SELFMAG
) != 0)
580 if (loc
->elf_ex
.e_type
!= ET_EXEC
&& loc
->elf_ex
.e_type
!= ET_DYN
)
582 if (!elf_check_arch(&loc
->elf_ex
))
584 if (!bprm
->file
->f_op
||!bprm
->file
->f_op
->mmap
)
587 /* Now read in all of the header information */
588 if (loc
->elf_ex
.e_phentsize
!= sizeof(struct elf_phdr
))
590 if (loc
->elf_ex
.e_phnum
< 1 ||
591 loc
->elf_ex
.e_phnum
> 65536U / sizeof(struct elf_phdr
))
593 size
= loc
->elf_ex
.e_phnum
* sizeof(struct elf_phdr
);
595 elf_phdata
= kmalloc(size
, GFP_KERNEL
);
599 retval
= kernel_read(bprm
->file
, loc
->elf_ex
.e_phoff
,
600 (char *)elf_phdata
, size
);
601 if (retval
!= size
) {
607 files
= current
->files
; /* Refcounted so ok */
608 retval
= unshare_files();
611 if (files
== current
->files
) {
612 put_files_struct(files
);
616 /* exec will make our files private anyway, but for the a.out
617 loader stuff we need to do it earlier */
618 retval
= get_unused_fd();
621 get_file(bprm
->file
);
622 fd_install(elf_exec_fileno
= retval
, bprm
->file
);
624 elf_ppnt
= elf_phdata
;
633 for (i
= 0; i
< loc
->elf_ex
.e_phnum
; i
++) {
634 if (elf_ppnt
->p_type
== PT_INTERP
) {
635 /* This is the program interpreter used for
636 * shared libraries - for now assume that this
637 * is an a.out format binary
640 if (elf_ppnt
->p_filesz
> PATH_MAX
||
641 elf_ppnt
->p_filesz
< 2)
645 elf_interpreter
= kmalloc(elf_ppnt
->p_filesz
,
647 if (!elf_interpreter
)
650 retval
= kernel_read(bprm
->file
, elf_ppnt
->p_offset
,
653 if (retval
!= elf_ppnt
->p_filesz
) {
656 goto out_free_interp
;
658 /* make sure path is NULL terminated */
660 if (elf_interpreter
[elf_ppnt
->p_filesz
- 1] != '\0')
661 goto out_free_interp
;
663 /* If the program interpreter is one of these two,
664 * then assume an iBCS2 image. Otherwise assume
665 * a native linux image.
667 if (strcmp(elf_interpreter
,"/usr/lib/libc.so.1") == 0 ||
668 strcmp(elf_interpreter
,"/usr/lib/ld.so.1") == 0)
669 ibcs2_interpreter
= 1;
672 * The early SET_PERSONALITY here is so that the lookup
673 * for the interpreter happens in the namespace of the
674 * to-be-execed image. SET_PERSONALITY can select an
677 * However, SET_PERSONALITY is NOT allowed to switch
678 * this task into the new images's memory mapping
679 * policy - that is, TASK_SIZE must still evaluate to
680 * that which is appropriate to the execing application.
681 * This is because exit_mmap() needs to have TASK_SIZE
682 * evaluate to the size of the old image.
684 * So if (say) a 64-bit application is execing a 32-bit
685 * application it is the architecture's responsibility
686 * to defer changing the value of TASK_SIZE until the
687 * switch really is going to happen - do this in
688 * flush_thread(). - akpm
690 SET_PERSONALITY(loc
->elf_ex
, ibcs2_interpreter
);
692 interpreter
= open_exec(elf_interpreter
);
693 retval
= PTR_ERR(interpreter
);
694 if (IS_ERR(interpreter
))
695 goto out_free_interp
;
698 * If the binary is not readable then enforce
699 * mm->dumpable = 0 regardless of the interpreter's
702 if (file_permission(interpreter
, MAY_READ
) < 0)
703 bprm
->interp_flags
|= BINPRM_FLAGS_ENFORCE_NONDUMP
;
705 retval
= kernel_read(interpreter
, 0, bprm
->buf
,
707 if (retval
!= BINPRM_BUF_SIZE
) {
710 goto out_free_dentry
;
713 /* Get the exec headers */
714 loc
->interp_ex
= *((struct exec
*)bprm
->buf
);
715 loc
->interp_elf_ex
= *((struct elfhdr
*)bprm
->buf
);
721 elf_ppnt
= elf_phdata
;
722 for (i
= 0; i
< loc
->elf_ex
.e_phnum
; i
++, elf_ppnt
++)
723 if (elf_ppnt
->p_type
== PT_GNU_STACK
) {
724 if (elf_ppnt
->p_flags
& PF_X
)
725 executable_stack
= EXSTACK_ENABLE_X
;
727 executable_stack
= EXSTACK_DISABLE_X
;
731 /* Some simple consistency checks for the interpreter */
732 if (elf_interpreter
) {
734 interpreter_type
= INTERPRETER_ELF
| INTERPRETER_AOUT
;
736 /* Now figure out which format our binary is */
737 if ((N_MAGIC(loc
->interp_ex
) != OMAGIC
) &&
738 (N_MAGIC(loc
->interp_ex
) != ZMAGIC
) &&
739 (N_MAGIC(loc
->interp_ex
) != QMAGIC
))
740 interpreter_type
= INTERPRETER_ELF
;
742 if (memcmp(loc
->interp_elf_ex
.e_ident
, ELFMAG
, SELFMAG
) != 0)
743 interpreter_type
&= ~INTERPRETER_ELF
;
745 if (interpreter_type
== INTERPRETER_AOUT
&& warn
< 10) {
746 printk(KERN_WARNING
"a.out ELF interpreter %s is "
747 "deprecated and will not be supported "
748 "after Linux 2.6.25\n", elf_interpreter
);
753 if (!interpreter_type
)
754 goto out_free_dentry
;
756 /* Make sure only one type was selected */
757 if ((interpreter_type
& INTERPRETER_ELF
) &&
758 interpreter_type
!= INTERPRETER_ELF
) {
759 // FIXME - ratelimit this before re-enabling
760 // printk(KERN_WARNING "ELF: Ambiguous type, using ELF\n");
761 interpreter_type
= INTERPRETER_ELF
;
763 /* Verify the interpreter has a valid arch */
764 if ((interpreter_type
== INTERPRETER_ELF
) &&
765 !elf_check_arch(&loc
->interp_elf_ex
))
766 goto out_free_dentry
;
768 /* Executables without an interpreter also need a personality */
769 SET_PERSONALITY(loc
->elf_ex
, ibcs2_interpreter
);
772 /* OK, we are done with that, now set up the arg stuff,
773 and then start this sucker up */
774 if ((!bprm
->sh_bang
) && (interpreter_type
== INTERPRETER_AOUT
)) {
775 char *passed_p
= passed_fileno
;
776 sprintf(passed_fileno
, "%d", elf_exec_fileno
);
778 if (elf_interpreter
) {
779 retval
= copy_strings_kernel(1, &passed_p
, bprm
);
781 goto out_free_dentry
;
786 /* Flush all traces of the currently running executable */
787 retval
= flush_old_exec(bprm
);
789 goto out_free_dentry
;
791 /* Discard our unneeded old files struct */
793 put_files_struct(files
);
797 /* OK, This is the point of no return */
798 current
->flags
&= ~PF_FORKNOEXEC
;
799 current
->mm
->def_flags
= def_flags
;
801 /* Do this immediately, since STACK_TOP as used in setup_arg_pages
802 may depend on the personality. */
803 SET_PERSONALITY(loc
->elf_ex
, ibcs2_interpreter
);
804 if (elf_read_implies_exec(loc
->elf_ex
, executable_stack
))
805 current
->personality
|= READ_IMPLIES_EXEC
;
807 if (!(current
->personality
& ADDR_NO_RANDOMIZE
) && randomize_va_space
)
808 current
->flags
|= PF_RANDOMIZE
;
809 arch_pick_mmap_layout(current
->mm
);
811 /* Do this so that we can load the interpreter, if need be. We will
812 change some of these later */
813 current
->mm
->free_area_cache
= current
->mm
->mmap_base
;
814 current
->mm
->cached_hole_size
= 0;
815 retval
= setup_arg_pages(bprm
, randomize_stack_top(STACK_TOP
),
818 send_sig(SIGKILL
, current
, 0);
819 goto out_free_dentry
;
822 current
->mm
->start_stack
= bprm
->p
;
824 /* Now we do a little grungy work by mmaping the ELF image into
825 the correct location in memory. At this point, we assume that
826 the image should be loaded at fixed address, not at a variable
828 for(i
= 0, elf_ppnt
= elf_phdata
;
829 i
< loc
->elf_ex
.e_phnum
; i
++, elf_ppnt
++) {
830 int elf_prot
= 0, elf_flags
;
831 unsigned long k
, vaddr
;
833 if (elf_ppnt
->p_type
!= PT_LOAD
)
836 if (unlikely (elf_brk
> elf_bss
)) {
839 /* There was a PT_LOAD segment with p_memsz > p_filesz
840 before this one. Map anonymous pages, if needed,
841 and clear the area. */
842 retval
= set_brk (elf_bss
+ load_bias
,
843 elf_brk
+ load_bias
);
845 send_sig(SIGKILL
, current
, 0);
846 goto out_free_dentry
;
848 nbyte
= ELF_PAGEOFFSET(elf_bss
);
850 nbyte
= ELF_MIN_ALIGN
- nbyte
;
851 if (nbyte
> elf_brk
- elf_bss
)
852 nbyte
= elf_brk
- elf_bss
;
853 if (clear_user((void __user
*)elf_bss
+
856 * This bss-zeroing can fail if the ELF
857 * file specifies odd protections. So
858 * we don't check the return value
864 if (elf_ppnt
->p_flags
& PF_R
)
865 elf_prot
|= PROT_READ
;
866 if (elf_ppnt
->p_flags
& PF_W
)
867 elf_prot
|= PROT_WRITE
;
868 if (elf_ppnt
->p_flags
& PF_X
)
869 elf_prot
|= PROT_EXEC
;
871 elf_flags
= MAP_PRIVATE
| MAP_DENYWRITE
| MAP_EXECUTABLE
;
873 vaddr
= elf_ppnt
->p_vaddr
;
874 if (loc
->elf_ex
.e_type
== ET_EXEC
|| load_addr_set
) {
875 elf_flags
|= MAP_FIXED
;
876 } else if (loc
->elf_ex
.e_type
== ET_DYN
) {
877 /* Try and get dynamic programs out of the way of the
878 * default mmap base, as well as whatever program they
879 * might try to exec. This is because the brk will
880 * follow the loader, and is not movable. */
881 load_bias
= ELF_PAGESTART(ELF_ET_DYN_BASE
- vaddr
);
884 error
= elf_map(bprm
->file
, load_bias
+ vaddr
, elf_ppnt
,
885 elf_prot
, elf_flags
);
886 if (BAD_ADDR(error
)) {
887 send_sig(SIGKILL
, current
, 0);
888 retval
= IS_ERR((void *)error
) ?
889 PTR_ERR((void*)error
) : -EINVAL
;
890 goto out_free_dentry
;
893 if (!load_addr_set
) {
895 load_addr
= (elf_ppnt
->p_vaddr
- elf_ppnt
->p_offset
);
896 if (loc
->elf_ex
.e_type
== ET_DYN
) {
898 ELF_PAGESTART(load_bias
+ vaddr
);
899 load_addr
+= load_bias
;
900 reloc_func_desc
= load_bias
;
903 k
= elf_ppnt
->p_vaddr
;
910 * Check to see if the section's size will overflow the
911 * allowed task size. Note that p_filesz must always be
912 * <= p_memsz so it is only necessary to check p_memsz.
914 if (BAD_ADDR(k
) || elf_ppnt
->p_filesz
> elf_ppnt
->p_memsz
||
915 elf_ppnt
->p_memsz
> TASK_SIZE
||
916 TASK_SIZE
- elf_ppnt
->p_memsz
< k
) {
917 /* set_brk can never work. Avoid overflows. */
918 send_sig(SIGKILL
, current
, 0);
920 goto out_free_dentry
;
923 k
= elf_ppnt
->p_vaddr
+ elf_ppnt
->p_filesz
;
927 if ((elf_ppnt
->p_flags
& PF_X
) && end_code
< k
)
931 k
= elf_ppnt
->p_vaddr
+ elf_ppnt
->p_memsz
;
936 loc
->elf_ex
.e_entry
+= load_bias
;
937 elf_bss
+= load_bias
;
938 elf_brk
+= load_bias
;
939 start_code
+= load_bias
;
940 end_code
+= load_bias
;
941 start_data
+= load_bias
;
942 end_data
+= load_bias
;
944 /* Calling set_brk effectively mmaps the pages that we need
945 * for the bss and break sections. We must do this before
946 * mapping in the interpreter, to make sure it doesn't wind
947 * up getting placed where the bss needs to go.
949 retval
= set_brk(elf_bss
, elf_brk
);
951 send_sig(SIGKILL
, current
, 0);
952 goto out_free_dentry
;
954 if (likely(elf_bss
!= elf_brk
) && unlikely(padzero(elf_bss
))) {
955 send_sig(SIGSEGV
, current
, 0);
956 retval
= -EFAULT
; /* Nobody gets to see this, but.. */
957 goto out_free_dentry
;
960 if (elf_interpreter
) {
961 if (interpreter_type
== INTERPRETER_AOUT
)
962 elf_entry
= load_aout_interp(&loc
->interp_ex
,
965 elf_entry
= load_elf_interp(&loc
->interp_elf_ex
,
968 if (BAD_ADDR(elf_entry
)) {
969 force_sig(SIGSEGV
, current
);
970 retval
= IS_ERR((void *)elf_entry
) ?
971 (int)elf_entry
: -EINVAL
;
972 goto out_free_dentry
;
974 reloc_func_desc
= interp_load_addr
;
976 allow_write_access(interpreter
);
978 kfree(elf_interpreter
);
980 elf_entry
= loc
->elf_ex
.e_entry
;
981 if (BAD_ADDR(elf_entry
)) {
982 force_sig(SIGSEGV
, current
);
984 goto out_free_dentry
;
990 if (interpreter_type
!= INTERPRETER_AOUT
)
991 sys_close(elf_exec_fileno
);
993 set_binfmt(&elf_format
);
995 #ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES
996 retval
= arch_setup_additional_pages(bprm
, executable_stack
);
998 send_sig(SIGKILL
, current
, 0);
1001 #endif /* ARCH_HAS_SETUP_ADDITIONAL_PAGES */
1003 compute_creds(bprm
);
1004 current
->flags
&= ~PF_FORKNOEXEC
;
1005 retval
= create_elf_tables(bprm
, &loc
->elf_ex
,
1006 (interpreter_type
== INTERPRETER_AOUT
),
1007 load_addr
, interp_load_addr
);
1009 send_sig(SIGKILL
, current
, 0);
1012 /* N.B. passed_fileno might not be initialized? */
1013 if (interpreter_type
== INTERPRETER_AOUT
)
1014 current
->mm
->arg_start
+= strlen(passed_fileno
) + 1;
1015 current
->mm
->end_code
= end_code
;
1016 current
->mm
->start_code
= start_code
;
1017 current
->mm
->start_data
= start_data
;
1018 current
->mm
->end_data
= end_data
;
1019 current
->mm
->start_stack
= bprm
->p
;
1021 if (current
->personality
& MMAP_PAGE_ZERO
) {
1022 /* Why this, you ask??? Well SVr4 maps page 0 as read-only,
1023 and some applications "depend" upon this behavior.
1024 Since we do not have the power to recompile these, we
1025 emulate the SVr4 behavior. Sigh. */
1026 down_write(¤t
->mm
->mmap_sem
);
1027 error
= do_mmap(NULL
, 0, PAGE_SIZE
, PROT_READ
| PROT_EXEC
,
1028 MAP_FIXED
| MAP_PRIVATE
, 0);
1029 up_write(¤t
->mm
->mmap_sem
);
1032 #ifdef ELF_PLAT_INIT
1034 * The ABI may specify that certain registers be set up in special
1035 * ways (on i386 %edx is the address of a DT_FINI function, for
1036 * example. In addition, it may also specify (eg, PowerPC64 ELF)
1037 * that the e_entry field is the address of the function descriptor
1038 * for the startup routine, rather than the address of the startup
1039 * routine itself. This macro performs whatever initialization to
1040 * the regs structure is required as well as any relocations to the
1041 * function descriptor entries when executing dynamically links apps.
1043 ELF_PLAT_INIT(regs
, reloc_func_desc
);
1046 start_thread(regs
, elf_entry
, bprm
->p
);
1047 if (unlikely(current
->ptrace
& PT_PTRACED
)) {
1048 if (current
->ptrace
& PT_TRACE_EXEC
)
1049 ptrace_notify ((PTRACE_EVENT_EXEC
<< 8) | SIGTRAP
);
1051 send_sig(SIGTRAP
, current
, 0);
1061 allow_write_access(interpreter
);
1065 kfree(elf_interpreter
);
1067 sys_close(elf_exec_fileno
);
1070 reset_files_struct(current
, files
);
1076 /* This is really simpleminded and specialized - we are loading an
1077 a.out library that is given an ELF header. */
1078 static int load_elf_library(struct file
*file
)
1080 struct elf_phdr
*elf_phdata
;
1081 struct elf_phdr
*eppnt
;
1082 unsigned long elf_bss
, bss
, len
;
1083 int retval
, error
, i
, j
;
1084 struct elfhdr elf_ex
;
1087 retval
= kernel_read(file
, 0, (char *)&elf_ex
, sizeof(elf_ex
));
1088 if (retval
!= sizeof(elf_ex
))
1091 if (memcmp(elf_ex
.e_ident
, ELFMAG
, SELFMAG
) != 0)
1094 /* First of all, some simple consistency checks */
1095 if (elf_ex
.e_type
!= ET_EXEC
|| elf_ex
.e_phnum
> 2 ||
1096 !elf_check_arch(&elf_ex
) || !file
->f_op
|| !file
->f_op
->mmap
)
1099 /* Now read in all of the header information */
1101 j
= sizeof(struct elf_phdr
) * elf_ex
.e_phnum
;
1102 /* j < ELF_MIN_ALIGN because elf_ex.e_phnum <= 2 */
1105 elf_phdata
= kmalloc(j
, GFP_KERNEL
);
1111 retval
= kernel_read(file
, elf_ex
.e_phoff
, (char *)eppnt
, j
);
1115 for (j
= 0, i
= 0; i
<elf_ex
.e_phnum
; i
++)
1116 if ((eppnt
+ i
)->p_type
== PT_LOAD
)
1121 while (eppnt
->p_type
!= PT_LOAD
)
1124 /* Now use mmap to map the library into memory. */
1125 down_write(¤t
->mm
->mmap_sem
);
1126 error
= do_mmap(file
,
1127 ELF_PAGESTART(eppnt
->p_vaddr
),
1129 ELF_PAGEOFFSET(eppnt
->p_vaddr
)),
1130 PROT_READ
| PROT_WRITE
| PROT_EXEC
,
1131 MAP_FIXED
| MAP_PRIVATE
| MAP_DENYWRITE
,
1133 ELF_PAGEOFFSET(eppnt
->p_vaddr
)));
1134 up_write(¤t
->mm
->mmap_sem
);
1135 if (error
!= ELF_PAGESTART(eppnt
->p_vaddr
))
1138 elf_bss
= eppnt
->p_vaddr
+ eppnt
->p_filesz
;
1139 if (padzero(elf_bss
)) {
1144 len
= ELF_PAGESTART(eppnt
->p_filesz
+ eppnt
->p_vaddr
+
1146 bss
= eppnt
->p_memsz
+ eppnt
->p_vaddr
;
1148 down_write(¤t
->mm
->mmap_sem
);
1149 do_brk(len
, bss
- len
);
1150 up_write(¤t
->mm
->mmap_sem
);
1161 * Note that some platforms still use traditional core dumps and not
1162 * the ELF core dump. Each platform can select it as appropriate.
1164 #if defined(USE_ELF_CORE_DUMP) && defined(CONFIG_ELF_CORE)
1169 * Modelled on fs/exec.c:aout_core_dump()
1170 * Jeremy Fitzhardinge <jeremy@sw.oz.au>
1173 * These are the only things you should do on a core-file: use only these
1174 * functions to write out all the necessary info.
1176 static int dump_write(struct file
*file
, const void *addr
, int nr
)
1178 return file
->f_op
->write(file
, addr
, nr
, &file
->f_pos
) == nr
;
1181 static int dump_seek(struct file
*file
, loff_t off
)
1183 if (file
->f_op
->llseek
&& file
->f_op
->llseek
!= no_llseek
) {
1184 if (file
->f_op
->llseek(file
, off
, SEEK_CUR
) < 0)
1187 char *buf
= (char *)get_zeroed_page(GFP_KERNEL
);
1191 unsigned long n
= off
;
1194 if (!dump_write(file
, buf
, n
))
1198 free_page((unsigned long)buf
);
1204 * Decide what to dump of a segment, part, all or none.
1206 static unsigned long vma_dump_size(struct vm_area_struct
*vma
,
1207 unsigned long mm_flags
)
1209 /* The vma can be set up to tell us the answer directly. */
1210 if (vma
->vm_flags
& VM_ALWAYSDUMP
)
1213 /* Do not dump I/O mapped devices or special mappings */
1214 if (vma
->vm_flags
& (VM_IO
| VM_RESERVED
))
1217 #define FILTER(type) (mm_flags & (1UL << MMF_DUMP_##type))
1219 /* By default, dump shared memory if mapped from an anonymous file. */
1220 if (vma
->vm_flags
& VM_SHARED
) {
1221 if (vma
->vm_file
->f_path
.dentry
->d_inode
->i_nlink
== 0 ?
1222 FILTER(ANON_SHARED
) : FILTER(MAPPED_SHARED
))
1227 /* Dump segments that have been written to. */
1228 if (vma
->anon_vma
&& FILTER(ANON_PRIVATE
))
1230 if (vma
->vm_file
== NULL
)
1233 if (FILTER(MAPPED_PRIVATE
))
1237 * If this looks like the beginning of a DSO or executable mapping,
1238 * check for an ELF header. If we find one, dump the first page to
1239 * aid in determining what was mapped here.
1241 if (FILTER(ELF_HEADERS
) && vma
->vm_file
!= NULL
&& vma
->vm_pgoff
== 0) {
1242 u32 __user
*header
= (u32 __user
*) vma
->vm_start
;
1245 * Doing it this way gets the constant folded by GCC.
1249 char elfmag
[SELFMAG
];
1251 BUILD_BUG_ON(SELFMAG
!= sizeof word
);
1252 magic
.elfmag
[EI_MAG0
] = ELFMAG0
;
1253 magic
.elfmag
[EI_MAG1
] = ELFMAG1
;
1254 magic
.elfmag
[EI_MAG2
] = ELFMAG2
;
1255 magic
.elfmag
[EI_MAG3
] = ELFMAG3
;
1256 if (get_user(word
, header
) == 0 && word
== magic
.cmp
)
1265 return vma
->vm_end
- vma
->vm_start
;
1268 /* An ELF note in memory */
1273 unsigned int datasz
;
1277 static int notesize(struct memelfnote
*en
)
1281 sz
= sizeof(struct elf_note
);
1282 sz
+= roundup(strlen(en
->name
) + 1, 4);
1283 sz
+= roundup(en
->datasz
, 4);
1288 #define DUMP_WRITE(addr, nr, foffset) \
1289 do { if (!dump_write(file, (addr), (nr))) return 0; *foffset += (nr); } while(0)
1291 static int alignfile(struct file
*file
, loff_t
*foffset
)
1293 static const char buf
[4] = { 0, };
1294 DUMP_WRITE(buf
, roundup(*foffset
, 4) - *foffset
, foffset
);
1298 static int writenote(struct memelfnote
*men
, struct file
*file
,
1302 en
.n_namesz
= strlen(men
->name
) + 1;
1303 en
.n_descsz
= men
->datasz
;
1304 en
.n_type
= men
->type
;
1306 DUMP_WRITE(&en
, sizeof(en
), foffset
);
1307 DUMP_WRITE(men
->name
, en
.n_namesz
, foffset
);
1308 if (!alignfile(file
, foffset
))
1310 DUMP_WRITE(men
->data
, men
->datasz
, foffset
);
1311 if (!alignfile(file
, foffset
))
1318 #define DUMP_WRITE(addr, nr) \
1319 if ((size += (nr)) > limit || !dump_write(file, (addr), (nr))) \
1321 #define DUMP_SEEK(off) \
1322 if (!dump_seek(file, (off))) \
1325 static void fill_elf_header(struct elfhdr
*elf
, int segs
)
1327 memcpy(elf
->e_ident
, ELFMAG
, SELFMAG
);
1328 elf
->e_ident
[EI_CLASS
] = ELF_CLASS
;
1329 elf
->e_ident
[EI_DATA
] = ELF_DATA
;
1330 elf
->e_ident
[EI_VERSION
] = EV_CURRENT
;
1331 elf
->e_ident
[EI_OSABI
] = ELF_OSABI
;
1332 memset(elf
->e_ident
+EI_PAD
, 0, EI_NIDENT
-EI_PAD
);
1334 elf
->e_type
= ET_CORE
;
1335 elf
->e_machine
= ELF_ARCH
;
1336 elf
->e_version
= EV_CURRENT
;
1338 elf
->e_phoff
= sizeof(struct elfhdr
);
1340 elf
->e_flags
= ELF_CORE_EFLAGS
;
1341 elf
->e_ehsize
= sizeof(struct elfhdr
);
1342 elf
->e_phentsize
= sizeof(struct elf_phdr
);
1343 elf
->e_phnum
= segs
;
1344 elf
->e_shentsize
= 0;
1346 elf
->e_shstrndx
= 0;
1350 static void fill_elf_note_phdr(struct elf_phdr
*phdr
, int sz
, loff_t offset
)
1352 phdr
->p_type
= PT_NOTE
;
1353 phdr
->p_offset
= offset
;
1356 phdr
->p_filesz
= sz
;
1363 static void fill_note(struct memelfnote
*note
, const char *name
, int type
,
1364 unsigned int sz
, void *data
)
1374 * fill up all the fields in prstatus from the given task struct, except
1375 * registers which need to be filled up separately.
1377 static void fill_prstatus(struct elf_prstatus
*prstatus
,
1378 struct task_struct
*p
, long signr
)
1380 prstatus
->pr_info
.si_signo
= prstatus
->pr_cursig
= signr
;
1381 prstatus
->pr_sigpend
= p
->pending
.signal
.sig
[0];
1382 prstatus
->pr_sighold
= p
->blocked
.sig
[0];
1383 prstatus
->pr_pid
= p
->pid
;
1384 prstatus
->pr_ppid
= p
->parent
->pid
;
1385 prstatus
->pr_pgrp
= process_group(p
);
1386 prstatus
->pr_sid
= process_session(p
);
1387 if (thread_group_leader(p
)) {
1389 * This is the record for the group leader. Add in the
1390 * cumulative times of previous dead threads. This total
1391 * won't include the time of each live thread whose state
1392 * is included in the core dump. The final total reported
1393 * to our parent process when it calls wait4 will include
1394 * those sums as well as the little bit more time it takes
1395 * this and each other thread to finish dying after the
1396 * core dump synchronization phase.
1398 cputime_to_timeval(cputime_add(p
->utime
, p
->signal
->utime
),
1399 &prstatus
->pr_utime
);
1400 cputime_to_timeval(cputime_add(p
->stime
, p
->signal
->stime
),
1401 &prstatus
->pr_stime
);
1403 cputime_to_timeval(p
->utime
, &prstatus
->pr_utime
);
1404 cputime_to_timeval(p
->stime
, &prstatus
->pr_stime
);
1406 cputime_to_timeval(p
->signal
->cutime
, &prstatus
->pr_cutime
);
1407 cputime_to_timeval(p
->signal
->cstime
, &prstatus
->pr_cstime
);
1410 static int fill_psinfo(struct elf_prpsinfo
*psinfo
, struct task_struct
*p
,
1411 struct mm_struct
*mm
)
1413 unsigned int i
, len
;
1415 /* first copy the parameters from user space */
1416 memset(psinfo
, 0, sizeof(struct elf_prpsinfo
));
1418 len
= mm
->arg_end
- mm
->arg_start
;
1419 if (len
>= ELF_PRARGSZ
)
1420 len
= ELF_PRARGSZ
-1;
1421 if (copy_from_user(&psinfo
->pr_psargs
,
1422 (const char __user
*)mm
->arg_start
, len
))
1424 for(i
= 0; i
< len
; i
++)
1425 if (psinfo
->pr_psargs
[i
] == 0)
1426 psinfo
->pr_psargs
[i
] = ' ';
1427 psinfo
->pr_psargs
[len
] = 0;
1429 psinfo
->pr_pid
= p
->pid
;
1430 psinfo
->pr_ppid
= p
->parent
->pid
;
1431 psinfo
->pr_pgrp
= process_group(p
);
1432 psinfo
->pr_sid
= process_session(p
);
1434 i
= p
->state
? ffz(~p
->state
) + 1 : 0;
1435 psinfo
->pr_state
= i
;
1436 psinfo
->pr_sname
= (i
> 5) ? '.' : "RSDTZW"[i
];
1437 psinfo
->pr_zomb
= psinfo
->pr_sname
== 'Z';
1438 psinfo
->pr_nice
= task_nice(p
);
1439 psinfo
->pr_flag
= p
->flags
;
1440 SET_UID(psinfo
->pr_uid
, p
->uid
);
1441 SET_GID(psinfo
->pr_gid
, p
->gid
);
1442 strncpy(psinfo
->pr_fname
, p
->comm
, sizeof(psinfo
->pr_fname
));
1447 /* Here is the structure in which status of each thread is captured. */
1448 struct elf_thread_status
1450 struct list_head list
;
1451 struct elf_prstatus prstatus
; /* NT_PRSTATUS */
1452 elf_fpregset_t fpu
; /* NT_PRFPREG */
1453 struct task_struct
*thread
;
1454 #ifdef ELF_CORE_COPY_XFPREGS
1455 elf_fpxregset_t xfpu
; /* ELF_CORE_XFPREG_TYPE */
1457 struct memelfnote notes
[3];
1462 * In order to add the specific thread information for the elf file format,
1463 * we need to keep a linked list of every threads pr_status and then create
1464 * a single section for them in the final core file.
1466 static int elf_dump_thread_status(long signr
, struct elf_thread_status
*t
)
1469 struct task_struct
*p
= t
->thread
;
1472 fill_prstatus(&t
->prstatus
, p
, signr
);
1473 elf_core_copy_task_regs(p
, &t
->prstatus
.pr_reg
);
1475 fill_note(&t
->notes
[0], "CORE", NT_PRSTATUS
, sizeof(t
->prstatus
),
1478 sz
+= notesize(&t
->notes
[0]);
1480 if ((t
->prstatus
.pr_fpvalid
= elf_core_copy_task_fpregs(p
, NULL
,
1482 fill_note(&t
->notes
[1], "CORE", NT_PRFPREG
, sizeof(t
->fpu
),
1485 sz
+= notesize(&t
->notes
[1]);
1488 #ifdef ELF_CORE_COPY_XFPREGS
1489 if (elf_core_copy_task_xfpregs(p
, &t
->xfpu
)) {
1490 fill_note(&t
->notes
[2], "LINUX", ELF_CORE_XFPREG_TYPE
,
1491 sizeof(t
->xfpu
), &t
->xfpu
);
1493 sz
+= notesize(&t
->notes
[2]);
1499 static struct vm_area_struct
*first_vma(struct task_struct
*tsk
,
1500 struct vm_area_struct
*gate_vma
)
1502 struct vm_area_struct
*ret
= tsk
->mm
->mmap
;
1509 * Helper function for iterating across a vma list. It ensures that the caller
1510 * will visit `gate_vma' prior to terminating the search.
1512 static struct vm_area_struct
*next_vma(struct vm_area_struct
*this_vma
,
1513 struct vm_area_struct
*gate_vma
)
1515 struct vm_area_struct
*ret
;
1517 ret
= this_vma
->vm_next
;
1520 if (this_vma
== gate_vma
)
1528 * This is a two-pass process; first we find the offsets of the bits,
1529 * and then they are actually written out. If we run out of core limit
1532 static int elf_core_dump(long signr
, struct pt_regs
*regs
, struct file
*file
, unsigned long limit
)
1540 struct vm_area_struct
*vma
, *gate_vma
;
1541 struct elfhdr
*elf
= NULL
;
1542 loff_t offset
= 0, dataoff
, foffset
;
1544 struct memelfnote
*notes
= NULL
;
1545 struct elf_prstatus
*prstatus
= NULL
; /* NT_PRSTATUS */
1546 struct elf_prpsinfo
*psinfo
= NULL
; /* NT_PRPSINFO */
1547 struct task_struct
*g
, *p
;
1548 LIST_HEAD(thread_list
);
1549 struct list_head
*t
;
1550 elf_fpregset_t
*fpu
= NULL
;
1551 #ifdef ELF_CORE_COPY_XFPREGS
1552 elf_fpxregset_t
*xfpu
= NULL
;
1554 int thread_status_size
= 0;
1556 unsigned long mm_flags
;
1559 * We no longer stop all VM operations.
1561 * This is because those proceses that could possibly change map_count
1562 * or the mmap / vma pages are now blocked in do_exit on current
1563 * finishing this core dump.
1565 * Only ptrace can touch these memory addresses, but it doesn't change
1566 * the map_count or the pages allocated. So no possibility of crashing
1567 * exists while dumping the mm->vm_next areas to the core file.
1570 /* alloc memory for large data structures: too large to be on stack */
1571 elf
= kmalloc(sizeof(*elf
), GFP_KERNEL
);
1574 prstatus
= kmalloc(sizeof(*prstatus
), GFP_KERNEL
);
1577 psinfo
= kmalloc(sizeof(*psinfo
), GFP_KERNEL
);
1580 notes
= kmalloc(NUM_NOTES
* sizeof(struct memelfnote
), GFP_KERNEL
);
1583 fpu
= kmalloc(sizeof(*fpu
), GFP_KERNEL
);
1586 #ifdef ELF_CORE_COPY_XFPREGS
1587 xfpu
= kmalloc(sizeof(*xfpu
), GFP_KERNEL
);
1593 struct elf_thread_status
*tmp
;
1596 if (current
->mm
== p
->mm
&& current
!= p
) {
1597 tmp
= kzalloc(sizeof(*tmp
), GFP_ATOMIC
);
1603 list_add(&tmp
->list
, &thread_list
);
1605 while_each_thread(g
,p
);
1607 list_for_each(t
, &thread_list
) {
1608 struct elf_thread_status
*tmp
;
1611 tmp
= list_entry(t
, struct elf_thread_status
, list
);
1612 sz
= elf_dump_thread_status(signr
, tmp
);
1613 thread_status_size
+= sz
;
1616 /* now collect the dump for the current */
1617 memset(prstatus
, 0, sizeof(*prstatus
));
1618 fill_prstatus(prstatus
, current
, signr
);
1619 elf_core_copy_regs(&prstatus
->pr_reg
, regs
);
1621 segs
= current
->mm
->map_count
;
1622 #ifdef ELF_CORE_EXTRA_PHDRS
1623 segs
+= ELF_CORE_EXTRA_PHDRS
;
1626 gate_vma
= get_gate_vma(current
);
1627 if (gate_vma
!= NULL
)
1631 fill_elf_header(elf
, segs
+ 1); /* including notes section */
1634 current
->flags
|= PF_DUMPCORE
;
1637 * Set up the notes in similar form to SVR4 core dumps made
1638 * with info from their /proc.
1641 fill_note(notes
+ 0, "CORE", NT_PRSTATUS
, sizeof(*prstatus
), prstatus
);
1642 fill_psinfo(psinfo
, current
->group_leader
, current
->mm
);
1643 fill_note(notes
+ 1, "CORE", NT_PRPSINFO
, sizeof(*psinfo
), psinfo
);
1647 auxv
= (elf_addr_t
*)current
->mm
->saved_auxv
;
1652 while (auxv
[i
- 2] != AT_NULL
);
1653 fill_note(¬es
[numnote
++], "CORE", NT_AUXV
,
1654 i
* sizeof(elf_addr_t
), auxv
);
1656 /* Try to dump the FPU. */
1657 if ((prstatus
->pr_fpvalid
=
1658 elf_core_copy_task_fpregs(current
, regs
, fpu
)))
1659 fill_note(notes
+ numnote
++,
1660 "CORE", NT_PRFPREG
, sizeof(*fpu
), fpu
);
1661 #ifdef ELF_CORE_COPY_XFPREGS
1662 if (elf_core_copy_task_xfpregs(current
, xfpu
))
1663 fill_note(notes
+ numnote
++,
1664 "LINUX", ELF_CORE_XFPREG_TYPE
, sizeof(*xfpu
), xfpu
);
1670 DUMP_WRITE(elf
, sizeof(*elf
));
1671 offset
+= sizeof(*elf
); /* Elf header */
1672 offset
+= (segs
+ 1) * sizeof(struct elf_phdr
); /* Program headers */
1675 /* Write notes phdr entry */
1677 struct elf_phdr phdr
;
1680 for (i
= 0; i
< numnote
; i
++)
1681 sz
+= notesize(notes
+ i
);
1683 sz
+= thread_status_size
;
1685 sz
+= elf_coredump_extra_notes_size();
1687 fill_elf_note_phdr(&phdr
, sz
, offset
);
1689 DUMP_WRITE(&phdr
, sizeof(phdr
));
1692 dataoff
= offset
= roundup(offset
, ELF_EXEC_PAGESIZE
);
1695 * We must use the same mm->flags while dumping core to avoid
1696 * inconsistency between the program headers and bodies, otherwise an
1697 * unusable core file can be generated.
1699 mm_flags
= current
->mm
->flags
;
1701 /* Write program headers for segments dump */
1702 for (vma
= first_vma(current
, gate_vma
); vma
!= NULL
;
1703 vma
= next_vma(vma
, gate_vma
)) {
1704 struct elf_phdr phdr
;
1706 phdr
.p_type
= PT_LOAD
;
1707 phdr
.p_offset
= offset
;
1708 phdr
.p_vaddr
= vma
->vm_start
;
1710 phdr
.p_filesz
= vma_dump_size(vma
, mm_flags
);
1711 phdr
.p_memsz
= vma
->vm_end
- vma
->vm_start
;
1712 offset
+= phdr
.p_filesz
;
1713 phdr
.p_flags
= vma
->vm_flags
& VM_READ
? PF_R
: 0;
1714 if (vma
->vm_flags
& VM_WRITE
)
1715 phdr
.p_flags
|= PF_W
;
1716 if (vma
->vm_flags
& VM_EXEC
)
1717 phdr
.p_flags
|= PF_X
;
1718 phdr
.p_align
= ELF_EXEC_PAGESIZE
;
1720 DUMP_WRITE(&phdr
, sizeof(phdr
));
1723 #ifdef ELF_CORE_WRITE_EXTRA_PHDRS
1724 ELF_CORE_WRITE_EXTRA_PHDRS
;
1727 /* write out the notes section */
1728 for (i
= 0; i
< numnote
; i
++)
1729 if (!writenote(notes
+ i
, file
, &foffset
))
1732 if (elf_coredump_extra_notes_write(file
, &foffset
))
1735 /* write out the thread status notes section */
1736 list_for_each(t
, &thread_list
) {
1737 struct elf_thread_status
*tmp
=
1738 list_entry(t
, struct elf_thread_status
, list
);
1740 for (i
= 0; i
< tmp
->num_notes
; i
++)
1741 if (!writenote(&tmp
->notes
[i
], file
, &foffset
))
1746 DUMP_SEEK(dataoff
- foffset
);
1748 for (vma
= first_vma(current
, gate_vma
); vma
!= NULL
;
1749 vma
= next_vma(vma
, gate_vma
)) {
1753 end
= vma
->vm_start
+ vma_dump_size(vma
, mm_flags
);
1755 for (addr
= vma
->vm_start
; addr
< end
; addr
+= PAGE_SIZE
) {
1757 struct vm_area_struct
*vma
;
1759 if (get_user_pages(current
, current
->mm
, addr
, 1, 0, 1,
1760 &page
, &vma
) <= 0) {
1761 DUMP_SEEK(PAGE_SIZE
);
1763 if (page
== ZERO_PAGE(0)) {
1764 if (!dump_seek(file
, PAGE_SIZE
)) {
1765 page_cache_release(page
);
1770 flush_cache_page(vma
, addr
,
1773 if ((size
+= PAGE_SIZE
) > limit
||
1774 !dump_write(file
, kaddr
,
1777 page_cache_release(page
);
1782 page_cache_release(page
);
1787 #ifdef ELF_CORE_WRITE_EXTRA_DATA
1788 ELF_CORE_WRITE_EXTRA_DATA
;
1795 while (!list_empty(&thread_list
)) {
1796 struct list_head
*tmp
= thread_list
.next
;
1798 kfree(list_entry(tmp
, struct elf_thread_status
, list
));
1806 #ifdef ELF_CORE_COPY_XFPREGS
1813 #endif /* USE_ELF_CORE_DUMP */
1815 static int __init
init_elf_binfmt(void)
1817 return register_binfmt(&elf_format
);
1820 static void __exit
exit_elf_binfmt(void)
1822 /* Remove the COFF and ELF loaders. */
1823 unregister_binfmt(&elf_format
);
1826 core_initcall(init_elf_binfmt
);
1827 module_exit(exit_elf_binfmt
);
1828 MODULE_LICENSE("GPL");