Merge branch 'akpm' (patches from Andrew)
[linux-2.6-microblaze.git] / fs / binfmt_elf.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * linux/fs/binfmt_elf.c
4  *
5  * These are the functions used to load ELF format executables as used
6  * on SVr4 machines.  Information on the format may be found in the book
7  * "UNIX SYSTEM V RELEASE 4 Programmers Guide: Ansi C and Programming Support
8  * Tools".
9  *
10  * Copyright 1993, 1994: Eric Youngdale (ericy@cais.com).
11  */
12
13 #include <linux/module.h>
14 #include <linux/kernel.h>
15 #include <linux/fs.h>
16 #include <linux/log2.h>
17 #include <linux/mm.h>
18 #include <linux/mman.h>
19 #include <linux/errno.h>
20 #include <linux/signal.h>
21 #include <linux/binfmts.h>
22 #include <linux/string.h>
23 #include <linux/file.h>
24 #include <linux/slab.h>
25 #include <linux/personality.h>
26 #include <linux/elfcore.h>
27 #include <linux/init.h>
28 #include <linux/highuid.h>
29 #include <linux/compiler.h>
30 #include <linux/highmem.h>
31 #include <linux/hugetlb.h>
32 #include <linux/pagemap.h>
33 #include <linux/vmalloc.h>
34 #include <linux/security.h>
35 #include <linux/random.h>
36 #include <linux/elf.h>
37 #include <linux/elf-randomize.h>
38 #include <linux/utsname.h>
39 #include <linux/coredump.h>
40 #include <linux/sched.h>
41 #include <linux/sched/coredump.h>
42 #include <linux/sched/task_stack.h>
43 #include <linux/sched/cputime.h>
44 #include <linux/sizes.h>
45 #include <linux/types.h>
46 #include <linux/cred.h>
47 #include <linux/dax.h>
48 #include <linux/uaccess.h>
49 #include <asm/param.h>
50 #include <asm/page.h>
51
52 #ifndef ELF_COMPAT
53 #define ELF_COMPAT 0
54 #endif
55
56 #ifndef user_long_t
57 #define user_long_t long
58 #endif
59 #ifndef user_siginfo_t
60 #define user_siginfo_t siginfo_t
61 #endif
62
63 /* That's for binfmt_elf_fdpic to deal with */
64 #ifndef elf_check_fdpic
65 #define elf_check_fdpic(ex) false
66 #endif
67
68 static int load_elf_binary(struct linux_binprm *bprm);
69
70 #ifdef CONFIG_USELIB
71 static int load_elf_library(struct file *);
72 #else
73 #define load_elf_library NULL
74 #endif
75
76 /*
77  * If we don't support core dumping, then supply a NULL so we
78  * don't even try.
79  */
80 #ifdef CONFIG_ELF_CORE
81 static int elf_core_dump(struct coredump_params *cprm);
82 #else
83 #define elf_core_dump   NULL
84 #endif
85
86 #if ELF_EXEC_PAGESIZE > PAGE_SIZE
87 #define ELF_MIN_ALIGN   ELF_EXEC_PAGESIZE
88 #else
89 #define ELF_MIN_ALIGN   PAGE_SIZE
90 #endif
91
92 #ifndef ELF_CORE_EFLAGS
93 #define ELF_CORE_EFLAGS 0
94 #endif
95
96 #define ELF_PAGESTART(_v) ((_v) & ~(unsigned long)(ELF_MIN_ALIGN-1))
97 #define ELF_PAGEOFFSET(_v) ((_v) & (ELF_MIN_ALIGN-1))
98 #define ELF_PAGEALIGN(_v) (((_v) + ELF_MIN_ALIGN - 1) & ~(ELF_MIN_ALIGN - 1))
99
100 static struct linux_binfmt elf_format = {
101         .module         = THIS_MODULE,
102         .load_binary    = load_elf_binary,
103         .load_shlib     = load_elf_library,
104         .core_dump      = elf_core_dump,
105         .min_coredump   = ELF_EXEC_PAGESIZE,
106 };
107
108 #define BAD_ADDR(x) (unlikely((unsigned long)(x) >= TASK_SIZE))
109
110 static int set_brk(unsigned long start, unsigned long end, int prot)
111 {
112         start = ELF_PAGEALIGN(start);
113         end = ELF_PAGEALIGN(end);
114         if (end > start) {
115                 /*
116                  * Map the last of the bss segment.
117                  * If the header is requesting these pages to be
118                  * executable, honour that (ppc32 needs this).
119                  */
120                 int error = vm_brk_flags(start, end - start,
121                                 prot & PROT_EXEC ? VM_EXEC : 0);
122                 if (error)
123                         return error;
124         }
125         current->mm->start_brk = current->mm->brk = end;
126         return 0;
127 }
128
129 /* We need to explicitly zero any fractional pages
130    after the data section (i.e. bss).  This would
131    contain the junk from the file that should not
132    be in memory
133  */
134 static int padzero(unsigned long elf_bss)
135 {
136         unsigned long nbyte;
137
138         nbyte = ELF_PAGEOFFSET(elf_bss);
139         if (nbyte) {
140                 nbyte = ELF_MIN_ALIGN - nbyte;
141                 if (clear_user((void __user *) elf_bss, nbyte))
142                         return -EFAULT;
143         }
144         return 0;
145 }
146
147 /* Let's use some macros to make this stack manipulation a little clearer */
148 #ifdef CONFIG_STACK_GROWSUP
149 #define STACK_ADD(sp, items) ((elf_addr_t __user *)(sp) + (items))
150 #define STACK_ROUND(sp, items) \
151         ((15 + (unsigned long) ((sp) + (items))) &~ 15UL)
152 #define STACK_ALLOC(sp, len) ({ \
153         elf_addr_t __user *old_sp = (elf_addr_t __user *)sp; sp += len; \
154         old_sp; })
155 #else
156 #define STACK_ADD(sp, items) ((elf_addr_t __user *)(sp) - (items))
157 #define STACK_ROUND(sp, items) \
158         (((unsigned long) (sp - items)) &~ 15UL)
159 #define STACK_ALLOC(sp, len) ({ sp -= len ; sp; })
160 #endif
161
162 #ifndef ELF_BASE_PLATFORM
163 /*
164  * AT_BASE_PLATFORM indicates the "real" hardware/microarchitecture.
165  * If the arch defines ELF_BASE_PLATFORM (in asm/elf.h), the value
166  * will be copied to the user stack in the same manner as AT_PLATFORM.
167  */
168 #define ELF_BASE_PLATFORM NULL
169 #endif
170
171 static int
172 create_elf_tables(struct linux_binprm *bprm, const struct elfhdr *exec,
173                 unsigned long load_addr, unsigned long interp_load_addr,
174                 unsigned long e_entry)
175 {
176         struct mm_struct *mm = current->mm;
177         unsigned long p = bprm->p;
178         int argc = bprm->argc;
179         int envc = bprm->envc;
180         elf_addr_t __user *sp;
181         elf_addr_t __user *u_platform;
182         elf_addr_t __user *u_base_platform;
183         elf_addr_t __user *u_rand_bytes;
184         const char *k_platform = ELF_PLATFORM;
185         const char *k_base_platform = ELF_BASE_PLATFORM;
186         unsigned char k_rand_bytes[16];
187         int items;
188         elf_addr_t *elf_info;
189         int ei_index;
190         const struct cred *cred = current_cred();
191         struct vm_area_struct *vma;
192
193         /*
194          * In some cases (e.g. Hyper-Threading), we want to avoid L1
195          * evictions by the processes running on the same package. One
196          * thing we can do is to shuffle the initial stack for them.
197          */
198
199         p = arch_align_stack(p);
200
201         /*
202          * If this architecture has a platform capability string, copy it
203          * to userspace.  In some cases (Sparc), this info is impossible
204          * for userspace to get any other way, in others (i386) it is
205          * merely difficult.
206          */
207         u_platform = NULL;
208         if (k_platform) {
209                 size_t len = strlen(k_platform) + 1;
210
211                 u_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
212                 if (copy_to_user(u_platform, k_platform, len))
213                         return -EFAULT;
214         }
215
216         /*
217          * If this architecture has a "base" platform capability
218          * string, copy it to userspace.
219          */
220         u_base_platform = NULL;
221         if (k_base_platform) {
222                 size_t len = strlen(k_base_platform) + 1;
223
224                 u_base_platform = (elf_addr_t __user *)STACK_ALLOC(p, len);
225                 if (copy_to_user(u_base_platform, k_base_platform, len))
226                         return -EFAULT;
227         }
228
229         /*
230          * Generate 16 random bytes for userspace PRNG seeding.
231          */
232         get_random_bytes(k_rand_bytes, sizeof(k_rand_bytes));
233         u_rand_bytes = (elf_addr_t __user *)
234                        STACK_ALLOC(p, sizeof(k_rand_bytes));
235         if (copy_to_user(u_rand_bytes, k_rand_bytes, sizeof(k_rand_bytes)))
236                 return -EFAULT;
237
238         /* Create the ELF interpreter info */
239         elf_info = (elf_addr_t *)mm->saved_auxv;
240         /* update AT_VECTOR_SIZE_BASE if the number of NEW_AUX_ENT() changes */
241 #define NEW_AUX_ENT(id, val) \
242         do { \
243                 *elf_info++ = id; \
244                 *elf_info++ = val; \
245         } while (0)
246
247 #ifdef ARCH_DLINFO
248         /* 
249          * ARCH_DLINFO must come first so PPC can do its special alignment of
250          * AUXV.
251          * update AT_VECTOR_SIZE_ARCH if the number of NEW_AUX_ENT() in
252          * ARCH_DLINFO changes
253          */
254         ARCH_DLINFO;
255 #endif
256         NEW_AUX_ENT(AT_HWCAP, ELF_HWCAP);
257         NEW_AUX_ENT(AT_PAGESZ, ELF_EXEC_PAGESIZE);
258         NEW_AUX_ENT(AT_CLKTCK, CLOCKS_PER_SEC);
259         NEW_AUX_ENT(AT_PHDR, load_addr + exec->e_phoff);
260         NEW_AUX_ENT(AT_PHENT, sizeof(struct elf_phdr));
261         NEW_AUX_ENT(AT_PHNUM, exec->e_phnum);
262         NEW_AUX_ENT(AT_BASE, interp_load_addr);
263         NEW_AUX_ENT(AT_FLAGS, 0);
264         NEW_AUX_ENT(AT_ENTRY, e_entry);
265         NEW_AUX_ENT(AT_UID, from_kuid_munged(cred->user_ns, cred->uid));
266         NEW_AUX_ENT(AT_EUID, from_kuid_munged(cred->user_ns, cred->euid));
267         NEW_AUX_ENT(AT_GID, from_kgid_munged(cred->user_ns, cred->gid));
268         NEW_AUX_ENT(AT_EGID, from_kgid_munged(cred->user_ns, cred->egid));
269         NEW_AUX_ENT(AT_SECURE, bprm->secureexec);
270         NEW_AUX_ENT(AT_RANDOM, (elf_addr_t)(unsigned long)u_rand_bytes);
271 #ifdef ELF_HWCAP2
272         NEW_AUX_ENT(AT_HWCAP2, ELF_HWCAP2);
273 #endif
274         NEW_AUX_ENT(AT_EXECFN, bprm->exec);
275         if (k_platform) {
276                 NEW_AUX_ENT(AT_PLATFORM,
277                             (elf_addr_t)(unsigned long)u_platform);
278         }
279         if (k_base_platform) {
280                 NEW_AUX_ENT(AT_BASE_PLATFORM,
281                             (elf_addr_t)(unsigned long)u_base_platform);
282         }
283         if (bprm->have_execfd) {
284                 NEW_AUX_ENT(AT_EXECFD, bprm->execfd);
285         }
286 #undef NEW_AUX_ENT
287         /* AT_NULL is zero; clear the rest too */
288         memset(elf_info, 0, (char *)mm->saved_auxv +
289                         sizeof(mm->saved_auxv) - (char *)elf_info);
290
291         /* And advance past the AT_NULL entry.  */
292         elf_info += 2;
293
294         ei_index = elf_info - (elf_addr_t *)mm->saved_auxv;
295         sp = STACK_ADD(p, ei_index);
296
297         items = (argc + 1) + (envc + 1) + 1;
298         bprm->p = STACK_ROUND(sp, items);
299
300         /* Point sp at the lowest address on the stack */
301 #ifdef CONFIG_STACK_GROWSUP
302         sp = (elf_addr_t __user *)bprm->p - items - ei_index;
303         bprm->exec = (unsigned long)sp; /* XXX: PARISC HACK */
304 #else
305         sp = (elf_addr_t __user *)bprm->p;
306 #endif
307
308
309         /*
310          * Grow the stack manually; some architectures have a limit on how
311          * far ahead a user-space access may be in order to grow the stack.
312          */
313         vma = find_extend_vma(mm, bprm->p);
314         if (!vma)
315                 return -EFAULT;
316
317         /* Now, let's put argc (and argv, envp if appropriate) on the stack */
318         if (put_user(argc, sp++))
319                 return -EFAULT;
320
321         /* Populate list of argv pointers back to argv strings. */
322         p = mm->arg_end = mm->arg_start;
323         while (argc-- > 0) {
324                 size_t len;
325                 if (put_user((elf_addr_t)p, sp++))
326                         return -EFAULT;
327                 len = strnlen_user((void __user *)p, MAX_ARG_STRLEN);
328                 if (!len || len > MAX_ARG_STRLEN)
329                         return -EINVAL;
330                 p += len;
331         }
332         if (put_user(0, sp++))
333                 return -EFAULT;
334         mm->arg_end = p;
335
336         /* Populate list of envp pointers back to envp strings. */
337         mm->env_end = mm->env_start = p;
338         while (envc-- > 0) {
339                 size_t len;
340                 if (put_user((elf_addr_t)p, sp++))
341                         return -EFAULT;
342                 len = strnlen_user((void __user *)p, MAX_ARG_STRLEN);
343                 if (!len || len > MAX_ARG_STRLEN)
344                         return -EINVAL;
345                 p += len;
346         }
347         if (put_user(0, sp++))
348                 return -EFAULT;
349         mm->env_end = p;
350
351         /* Put the elf_info on the stack in the right place.  */
352         if (copy_to_user(sp, mm->saved_auxv, ei_index * sizeof(elf_addr_t)))
353                 return -EFAULT;
354         return 0;
355 }
356
357 static unsigned long elf_map(struct file *filep, unsigned long addr,
358                 const struct elf_phdr *eppnt, int prot, int type,
359                 unsigned long total_size)
360 {
361         unsigned long map_addr;
362         unsigned long size = eppnt->p_filesz + ELF_PAGEOFFSET(eppnt->p_vaddr);
363         unsigned long off = eppnt->p_offset - ELF_PAGEOFFSET(eppnt->p_vaddr);
364         addr = ELF_PAGESTART(addr);
365         size = ELF_PAGEALIGN(size);
366
367         /* mmap() will return -EINVAL if given a zero size, but a
368          * segment with zero filesize is perfectly valid */
369         if (!size)
370                 return addr;
371
372         /*
373         * total_size is the size of the ELF (interpreter) image.
374         * The _first_ mmap needs to know the full size, otherwise
375         * randomization might put this image into an overlapping
376         * position with the ELF binary image. (since size < total_size)
377         * So we first map the 'big' image - and unmap the remainder at
378         * the end. (which unmap is needed for ELF images with holes.)
379         */
380         if (total_size) {
381                 total_size = ELF_PAGEALIGN(total_size);
382                 map_addr = vm_mmap(filep, addr, total_size, prot, type, off);
383                 if (!BAD_ADDR(map_addr))
384                         vm_munmap(map_addr+size, total_size-size);
385         } else
386                 map_addr = vm_mmap(filep, addr, size, prot, type, off);
387
388         if ((type & MAP_FIXED_NOREPLACE) &&
389             PTR_ERR((void *)map_addr) == -EEXIST)
390                 pr_info("%d (%s): Uhuuh, elf segment at %px requested but the memory is mapped already\n",
391                         task_pid_nr(current), current->comm, (void *)addr);
392
393         return(map_addr);
394 }
395
396 static unsigned long total_mapping_size(const struct elf_phdr *cmds, int nr)
397 {
398         int i, first_idx = -1, last_idx = -1;
399
400         for (i = 0; i < nr; i++) {
401                 if (cmds[i].p_type == PT_LOAD) {
402                         last_idx = i;
403                         if (first_idx == -1)
404                                 first_idx = i;
405                 }
406         }
407         if (first_idx == -1)
408                 return 0;
409
410         return cmds[last_idx].p_vaddr + cmds[last_idx].p_memsz -
411                                 ELF_PAGESTART(cmds[first_idx].p_vaddr);
412 }
413
414 static int elf_read(struct file *file, void *buf, size_t len, loff_t pos)
415 {
416         ssize_t rv;
417
418         rv = kernel_read(file, buf, len, &pos);
419         if (unlikely(rv != len)) {
420                 return (rv < 0) ? rv : -EIO;
421         }
422         return 0;
423 }
424
425 static unsigned long maximum_alignment(struct elf_phdr *cmds, int nr)
426 {
427         unsigned long alignment = 0;
428         int i;
429
430         for (i = 0; i < nr; i++) {
431                 if (cmds[i].p_type == PT_LOAD) {
432                         unsigned long p_align = cmds[i].p_align;
433
434                         /* skip non-power of two alignments as invalid */
435                         if (!is_power_of_2(p_align))
436                                 continue;
437                         alignment = max(alignment, p_align);
438                 }
439         }
440
441         /* ensure we align to at least one page */
442         return ELF_PAGEALIGN(alignment);
443 }
444
445 /**
446  * load_elf_phdrs() - load ELF program headers
447  * @elf_ex:   ELF header of the binary whose program headers should be loaded
448  * @elf_file: the opened ELF binary file
449  *
450  * Loads ELF program headers from the binary file elf_file, which has the ELF
451  * header pointed to by elf_ex, into a newly allocated array. The caller is
452  * responsible for freeing the allocated data. Returns an ERR_PTR upon failure.
453  */
454 static struct elf_phdr *load_elf_phdrs(const struct elfhdr *elf_ex,
455                                        struct file *elf_file)
456 {
457         struct elf_phdr *elf_phdata = NULL;
458         int retval, err = -1;
459         unsigned int size;
460
461         /*
462          * If the size of this structure has changed, then punt, since
463          * we will be doing the wrong thing.
464          */
465         if (elf_ex->e_phentsize != sizeof(struct elf_phdr))
466                 goto out;
467
468         /* Sanity check the number of program headers... */
469         /* ...and their total size. */
470         size = sizeof(struct elf_phdr) * elf_ex->e_phnum;
471         if (size == 0 || size > 65536 || size > ELF_MIN_ALIGN)
472                 goto out;
473
474         elf_phdata = kmalloc(size, GFP_KERNEL);
475         if (!elf_phdata)
476                 goto out;
477
478         /* Read in the program headers */
479         retval = elf_read(elf_file, elf_phdata, size, elf_ex->e_phoff);
480         if (retval < 0) {
481                 err = retval;
482                 goto out;
483         }
484
485         /* Success! */
486         err = 0;
487 out:
488         if (err) {
489                 kfree(elf_phdata);
490                 elf_phdata = NULL;
491         }
492         return elf_phdata;
493 }
494
495 #ifndef CONFIG_ARCH_BINFMT_ELF_STATE
496
497 /**
498  * struct arch_elf_state - arch-specific ELF loading state
499  *
500  * This structure is used to preserve architecture specific data during
501  * the loading of an ELF file, throughout the checking of architecture
502  * specific ELF headers & through to the point where the ELF load is
503  * known to be proceeding (ie. SET_PERSONALITY).
504  *
505  * This implementation is a dummy for architectures which require no
506  * specific state.
507  */
508 struct arch_elf_state {
509 };
510
511 #define INIT_ARCH_ELF_STATE {}
512
513 /**
514  * arch_elf_pt_proc() - check a PT_LOPROC..PT_HIPROC ELF program header
515  * @ehdr:       The main ELF header
516  * @phdr:       The program header to check
517  * @elf:        The open ELF file
518  * @is_interp:  True if the phdr is from the interpreter of the ELF being
519  *              loaded, else false.
520  * @state:      Architecture-specific state preserved throughout the process
521  *              of loading the ELF.
522  *
523  * Inspects the program header phdr to validate its correctness and/or
524  * suitability for the system. Called once per ELF program header in the
525  * range PT_LOPROC to PT_HIPROC, for both the ELF being loaded and its
526  * interpreter.
527  *
528  * Return: Zero to proceed with the ELF load, non-zero to fail the ELF load
529  *         with that return code.
530  */
531 static inline int arch_elf_pt_proc(struct elfhdr *ehdr,
532                                    struct elf_phdr *phdr,
533                                    struct file *elf, bool is_interp,
534                                    struct arch_elf_state *state)
535 {
536         /* Dummy implementation, always proceed */
537         return 0;
538 }
539
540 /**
541  * arch_check_elf() - check an ELF executable
542  * @ehdr:       The main ELF header
543  * @has_interp: True if the ELF has an interpreter, else false.
544  * @interp_ehdr: The interpreter's ELF header
545  * @state:      Architecture-specific state preserved throughout the process
546  *              of loading the ELF.
547  *
548  * Provides a final opportunity for architecture code to reject the loading
549  * of the ELF & cause an exec syscall to return an error. This is called after
550  * all program headers to be checked by arch_elf_pt_proc have been.
551  *
552  * Return: Zero to proceed with the ELF load, non-zero to fail the ELF load
553  *         with that return code.
554  */
555 static inline int arch_check_elf(struct elfhdr *ehdr, bool has_interp,
556                                  struct elfhdr *interp_ehdr,
557                                  struct arch_elf_state *state)
558 {
559         /* Dummy implementation, always proceed */
560         return 0;
561 }
562
563 #endif /* !CONFIG_ARCH_BINFMT_ELF_STATE */
564
565 static inline int make_prot(u32 p_flags, struct arch_elf_state *arch_state,
566                             bool has_interp, bool is_interp)
567 {
568         int prot = 0;
569
570         if (p_flags & PF_R)
571                 prot |= PROT_READ;
572         if (p_flags & PF_W)
573                 prot |= PROT_WRITE;
574         if (p_flags & PF_X)
575                 prot |= PROT_EXEC;
576
577         return arch_elf_adjust_prot(prot, arch_state, has_interp, is_interp);
578 }
579
580 /* This is much more generalized than the library routine read function,
581    so we keep this separate.  Technically the library read function
582    is only provided so that we can read a.out libraries that have
583    an ELF header */
584
585 static unsigned long load_elf_interp(struct elfhdr *interp_elf_ex,
586                 struct file *interpreter,
587                 unsigned long no_base, struct elf_phdr *interp_elf_phdata,
588                 struct arch_elf_state *arch_state)
589 {
590         struct elf_phdr *eppnt;
591         unsigned long load_addr = 0;
592         int load_addr_set = 0;
593         unsigned long last_bss = 0, elf_bss = 0;
594         int bss_prot = 0;
595         unsigned long error = ~0UL;
596         unsigned long total_size;
597         int i;
598
599         /* First of all, some simple consistency checks */
600         if (interp_elf_ex->e_type != ET_EXEC &&
601             interp_elf_ex->e_type != ET_DYN)
602                 goto out;
603         if (!elf_check_arch(interp_elf_ex) ||
604             elf_check_fdpic(interp_elf_ex))
605                 goto out;
606         if (!interpreter->f_op->mmap)
607                 goto out;
608
609         total_size = total_mapping_size(interp_elf_phdata,
610                                         interp_elf_ex->e_phnum);
611         if (!total_size) {
612                 error = -EINVAL;
613                 goto out;
614         }
615
616         eppnt = interp_elf_phdata;
617         for (i = 0; i < interp_elf_ex->e_phnum; i++, eppnt++) {
618                 if (eppnt->p_type == PT_LOAD) {
619                         int elf_type = MAP_PRIVATE | MAP_DENYWRITE;
620                         int elf_prot = make_prot(eppnt->p_flags, arch_state,
621                                                  true, true);
622                         unsigned long vaddr = 0;
623                         unsigned long k, map_addr;
624
625                         vaddr = eppnt->p_vaddr;
626                         if (interp_elf_ex->e_type == ET_EXEC || load_addr_set)
627                                 elf_type |= MAP_FIXED_NOREPLACE;
628                         else if (no_base && interp_elf_ex->e_type == ET_DYN)
629                                 load_addr = -vaddr;
630
631                         map_addr = elf_map(interpreter, load_addr + vaddr,
632                                         eppnt, elf_prot, elf_type, total_size);
633                         total_size = 0;
634                         error = map_addr;
635                         if (BAD_ADDR(map_addr))
636                                 goto out;
637
638                         if (!load_addr_set &&
639                             interp_elf_ex->e_type == ET_DYN) {
640                                 load_addr = map_addr - ELF_PAGESTART(vaddr);
641                                 load_addr_set = 1;
642                         }
643
644                         /*
645                          * Check to see if the section's size will overflow the
646                          * allowed task size. Note that p_filesz must always be
647                          * <= p_memsize so it's only necessary to check p_memsz.
648                          */
649                         k = load_addr + eppnt->p_vaddr;
650                         if (BAD_ADDR(k) ||
651                             eppnt->p_filesz > eppnt->p_memsz ||
652                             eppnt->p_memsz > TASK_SIZE ||
653                             TASK_SIZE - eppnt->p_memsz < k) {
654                                 error = -ENOMEM;
655                                 goto out;
656                         }
657
658                         /*
659                          * Find the end of the file mapping for this phdr, and
660                          * keep track of the largest address we see for this.
661                          */
662                         k = load_addr + eppnt->p_vaddr + eppnt->p_filesz;
663                         if (k > elf_bss)
664                                 elf_bss = k;
665
666                         /*
667                          * Do the same thing for the memory mapping - between
668                          * elf_bss and last_bss is the bss section.
669                          */
670                         k = load_addr + eppnt->p_vaddr + eppnt->p_memsz;
671                         if (k > last_bss) {
672                                 last_bss = k;
673                                 bss_prot = elf_prot;
674                         }
675                 }
676         }
677
678         /*
679          * Now fill out the bss section: first pad the last page from
680          * the file up to the page boundary, and zero it from elf_bss
681          * up to the end of the page.
682          */
683         if (padzero(elf_bss)) {
684                 error = -EFAULT;
685                 goto out;
686         }
687         /*
688          * Next, align both the file and mem bss up to the page size,
689          * since this is where elf_bss was just zeroed up to, and where
690          * last_bss will end after the vm_brk_flags() below.
691          */
692         elf_bss = ELF_PAGEALIGN(elf_bss);
693         last_bss = ELF_PAGEALIGN(last_bss);
694         /* Finally, if there is still more bss to allocate, do it. */
695         if (last_bss > elf_bss) {
696                 error = vm_brk_flags(elf_bss, last_bss - elf_bss,
697                                 bss_prot & PROT_EXEC ? VM_EXEC : 0);
698                 if (error)
699                         goto out;
700         }
701
702         error = load_addr;
703 out:
704         return error;
705 }
706
707 /*
708  * These are the functions used to load ELF style executables and shared
709  * libraries.  There is no binary dependent code anywhere else.
710  */
711
712 static int parse_elf_property(const char *data, size_t *off, size_t datasz,
713                               struct arch_elf_state *arch,
714                               bool have_prev_type, u32 *prev_type)
715 {
716         size_t o, step;
717         const struct gnu_property *pr;
718         int ret;
719
720         if (*off == datasz)
721                 return -ENOENT;
722
723         if (WARN_ON_ONCE(*off > datasz || *off % ELF_GNU_PROPERTY_ALIGN))
724                 return -EIO;
725         o = *off;
726         datasz -= *off;
727
728         if (datasz < sizeof(*pr))
729                 return -ENOEXEC;
730         pr = (const struct gnu_property *)(data + o);
731         o += sizeof(*pr);
732         datasz -= sizeof(*pr);
733
734         if (pr->pr_datasz > datasz)
735                 return -ENOEXEC;
736
737         WARN_ON_ONCE(o % ELF_GNU_PROPERTY_ALIGN);
738         step = round_up(pr->pr_datasz, ELF_GNU_PROPERTY_ALIGN);
739         if (step > datasz)
740                 return -ENOEXEC;
741
742         /* Properties are supposed to be unique and sorted on pr_type: */
743         if (have_prev_type && pr->pr_type <= *prev_type)
744                 return -ENOEXEC;
745         *prev_type = pr->pr_type;
746
747         ret = arch_parse_elf_property(pr->pr_type, data + o,
748                                       pr->pr_datasz, ELF_COMPAT, arch);
749         if (ret)
750                 return ret;
751
752         *off = o + step;
753         return 0;
754 }
755
756 #define NOTE_DATA_SZ SZ_1K
757 #define GNU_PROPERTY_TYPE_0_NAME "GNU"
758 #define NOTE_NAME_SZ (sizeof(GNU_PROPERTY_TYPE_0_NAME))
759
760 static int parse_elf_properties(struct file *f, const struct elf_phdr *phdr,
761                                 struct arch_elf_state *arch)
762 {
763         union {
764                 struct elf_note nhdr;
765                 char data[NOTE_DATA_SZ];
766         } note;
767         loff_t pos;
768         ssize_t n;
769         size_t off, datasz;
770         int ret;
771         bool have_prev_type;
772         u32 prev_type;
773
774         if (!IS_ENABLED(CONFIG_ARCH_USE_GNU_PROPERTY) || !phdr)
775                 return 0;
776
777         /* load_elf_binary() shouldn't call us unless this is true... */
778         if (WARN_ON_ONCE(phdr->p_type != PT_GNU_PROPERTY))
779                 return -ENOEXEC;
780
781         /* If the properties are crazy large, that's too bad (for now): */
782         if (phdr->p_filesz > sizeof(note))
783                 return -ENOEXEC;
784
785         pos = phdr->p_offset;
786         n = kernel_read(f, &note, phdr->p_filesz, &pos);
787
788         BUILD_BUG_ON(sizeof(note) < sizeof(note.nhdr) + NOTE_NAME_SZ);
789         if (n < 0 || n < sizeof(note.nhdr) + NOTE_NAME_SZ)
790                 return -EIO;
791
792         if (note.nhdr.n_type != NT_GNU_PROPERTY_TYPE_0 ||
793             note.nhdr.n_namesz != NOTE_NAME_SZ ||
794             strncmp(note.data + sizeof(note.nhdr),
795                     GNU_PROPERTY_TYPE_0_NAME, n - sizeof(note.nhdr)))
796                 return -ENOEXEC;
797
798         off = round_up(sizeof(note.nhdr) + NOTE_NAME_SZ,
799                        ELF_GNU_PROPERTY_ALIGN);
800         if (off > n)
801                 return -ENOEXEC;
802
803         if (note.nhdr.n_descsz > n - off)
804                 return -ENOEXEC;
805         datasz = off + note.nhdr.n_descsz;
806
807         have_prev_type = false;
808         do {
809                 ret = parse_elf_property(note.data, &off, datasz, arch,
810                                          have_prev_type, &prev_type);
811                 have_prev_type = true;
812         } while (!ret);
813
814         return ret == -ENOENT ? 0 : ret;
815 }
816
817 static int load_elf_binary(struct linux_binprm *bprm)
818 {
819         struct file *interpreter = NULL; /* to shut gcc up */
820         unsigned long load_addr = 0, load_bias = 0;
821         int load_addr_set = 0;
822         unsigned long error;
823         struct elf_phdr *elf_ppnt, *elf_phdata, *interp_elf_phdata = NULL;
824         struct elf_phdr *elf_property_phdata = NULL;
825         unsigned long elf_bss, elf_brk;
826         int bss_prot = 0;
827         int retval, i;
828         unsigned long elf_entry;
829         unsigned long e_entry;
830         unsigned long interp_load_addr = 0;
831         unsigned long start_code, end_code, start_data, end_data;
832         unsigned long reloc_func_desc __maybe_unused = 0;
833         int executable_stack = EXSTACK_DEFAULT;
834         struct elfhdr *elf_ex = (struct elfhdr *)bprm->buf;
835         struct elfhdr *interp_elf_ex = NULL;
836         struct arch_elf_state arch_state = INIT_ARCH_ELF_STATE;
837         struct mm_struct *mm;
838         struct pt_regs *regs;
839
840         retval = -ENOEXEC;
841         /* First of all, some simple consistency checks */
842         if (memcmp(elf_ex->e_ident, ELFMAG, SELFMAG) != 0)
843                 goto out;
844
845         if (elf_ex->e_type != ET_EXEC && elf_ex->e_type != ET_DYN)
846                 goto out;
847         if (!elf_check_arch(elf_ex))
848                 goto out;
849         if (elf_check_fdpic(elf_ex))
850                 goto out;
851         if (!bprm->file->f_op->mmap)
852                 goto out;
853
854         elf_phdata = load_elf_phdrs(elf_ex, bprm->file);
855         if (!elf_phdata)
856                 goto out;
857
858         elf_ppnt = elf_phdata;
859         for (i = 0; i < elf_ex->e_phnum; i++, elf_ppnt++) {
860                 char *elf_interpreter;
861
862                 if (elf_ppnt->p_type == PT_GNU_PROPERTY) {
863                         elf_property_phdata = elf_ppnt;
864                         continue;
865                 }
866
867                 if (elf_ppnt->p_type != PT_INTERP)
868                         continue;
869
870                 /*
871                  * This is the program interpreter used for shared libraries -
872                  * for now assume that this is an a.out format binary.
873                  */
874                 retval = -ENOEXEC;
875                 if (elf_ppnt->p_filesz > PATH_MAX || elf_ppnt->p_filesz < 2)
876                         goto out_free_ph;
877
878                 retval = -ENOMEM;
879                 elf_interpreter = kmalloc(elf_ppnt->p_filesz, GFP_KERNEL);
880                 if (!elf_interpreter)
881                         goto out_free_ph;
882
883                 retval = elf_read(bprm->file, elf_interpreter, elf_ppnt->p_filesz,
884                                   elf_ppnt->p_offset);
885                 if (retval < 0)
886                         goto out_free_interp;
887                 /* make sure path is NULL terminated */
888                 retval = -ENOEXEC;
889                 if (elf_interpreter[elf_ppnt->p_filesz - 1] != '\0')
890                         goto out_free_interp;
891
892                 interpreter = open_exec(elf_interpreter);
893                 kfree(elf_interpreter);
894                 retval = PTR_ERR(interpreter);
895                 if (IS_ERR(interpreter))
896                         goto out_free_ph;
897
898                 /*
899                  * If the binary is not readable then enforce mm->dumpable = 0
900                  * regardless of the interpreter's permissions.
901                  */
902                 would_dump(bprm, interpreter);
903
904                 interp_elf_ex = kmalloc(sizeof(*interp_elf_ex), GFP_KERNEL);
905                 if (!interp_elf_ex) {
906                         retval = -ENOMEM;
907                         goto out_free_ph;
908                 }
909
910                 /* Get the exec headers */
911                 retval = elf_read(interpreter, interp_elf_ex,
912                                   sizeof(*interp_elf_ex), 0);
913                 if (retval < 0)
914                         goto out_free_dentry;
915
916                 break;
917
918 out_free_interp:
919                 kfree(elf_interpreter);
920                 goto out_free_ph;
921         }
922
923         elf_ppnt = elf_phdata;
924         for (i = 0; i < elf_ex->e_phnum; i++, elf_ppnt++)
925                 switch (elf_ppnt->p_type) {
926                 case PT_GNU_STACK:
927                         if (elf_ppnt->p_flags & PF_X)
928                                 executable_stack = EXSTACK_ENABLE_X;
929                         else
930                                 executable_stack = EXSTACK_DISABLE_X;
931                         break;
932
933                 case PT_LOPROC ... PT_HIPROC:
934                         retval = arch_elf_pt_proc(elf_ex, elf_ppnt,
935                                                   bprm->file, false,
936                                                   &arch_state);
937                         if (retval)
938                                 goto out_free_dentry;
939                         break;
940                 }
941
942         /* Some simple consistency checks for the interpreter */
943         if (interpreter) {
944                 retval = -ELIBBAD;
945                 /* Not an ELF interpreter */
946                 if (memcmp(interp_elf_ex->e_ident, ELFMAG, SELFMAG) != 0)
947                         goto out_free_dentry;
948                 /* Verify the interpreter has a valid arch */
949                 if (!elf_check_arch(interp_elf_ex) ||
950                     elf_check_fdpic(interp_elf_ex))
951                         goto out_free_dentry;
952
953                 /* Load the interpreter program headers */
954                 interp_elf_phdata = load_elf_phdrs(interp_elf_ex,
955                                                    interpreter);
956                 if (!interp_elf_phdata)
957                         goto out_free_dentry;
958
959                 /* Pass PT_LOPROC..PT_HIPROC headers to arch code */
960                 elf_property_phdata = NULL;
961                 elf_ppnt = interp_elf_phdata;
962                 for (i = 0; i < interp_elf_ex->e_phnum; i++, elf_ppnt++)
963                         switch (elf_ppnt->p_type) {
964                         case PT_GNU_PROPERTY:
965                                 elf_property_phdata = elf_ppnt;
966                                 break;
967
968                         case PT_LOPROC ... PT_HIPROC:
969                                 retval = arch_elf_pt_proc(interp_elf_ex,
970                                                           elf_ppnt, interpreter,
971                                                           true, &arch_state);
972                                 if (retval)
973                                         goto out_free_dentry;
974                                 break;
975                         }
976         }
977
978         retval = parse_elf_properties(interpreter ?: bprm->file,
979                                       elf_property_phdata, &arch_state);
980         if (retval)
981                 goto out_free_dentry;
982
983         /*
984          * Allow arch code to reject the ELF at this point, whilst it's
985          * still possible to return an error to the code that invoked
986          * the exec syscall.
987          */
988         retval = arch_check_elf(elf_ex,
989                                 !!interpreter, interp_elf_ex,
990                                 &arch_state);
991         if (retval)
992                 goto out_free_dentry;
993
994         /* Flush all traces of the currently running executable */
995         retval = begin_new_exec(bprm);
996         if (retval)
997                 goto out_free_dentry;
998
999         /* Do this immediately, since STACK_TOP as used in setup_arg_pages
1000            may depend on the personality.  */
1001         SET_PERSONALITY2(*elf_ex, &arch_state);
1002         if (elf_read_implies_exec(*elf_ex, executable_stack))
1003                 current->personality |= READ_IMPLIES_EXEC;
1004
1005         if (!(current->personality & ADDR_NO_RANDOMIZE) && randomize_va_space)
1006                 current->flags |= PF_RANDOMIZE;
1007
1008         setup_new_exec(bprm);
1009
1010         /* Do this so that we can load the interpreter, if need be.  We will
1011            change some of these later */
1012         retval = setup_arg_pages(bprm, randomize_stack_top(STACK_TOP),
1013                                  executable_stack);
1014         if (retval < 0)
1015                 goto out_free_dentry;
1016         
1017         elf_bss = 0;
1018         elf_brk = 0;
1019
1020         start_code = ~0UL;
1021         end_code = 0;
1022         start_data = 0;
1023         end_data = 0;
1024
1025         /* Now we do a little grungy work by mmapping the ELF image into
1026            the correct location in memory. */
1027         for(i = 0, elf_ppnt = elf_phdata;
1028             i < elf_ex->e_phnum; i++, elf_ppnt++) {
1029                 int elf_prot, elf_flags;
1030                 unsigned long k, vaddr;
1031                 unsigned long total_size = 0;
1032                 unsigned long alignment;
1033
1034                 if (elf_ppnt->p_type != PT_LOAD)
1035                         continue;
1036
1037                 if (unlikely (elf_brk > elf_bss)) {
1038                         unsigned long nbyte;
1039                     
1040                         /* There was a PT_LOAD segment with p_memsz > p_filesz
1041                            before this one. Map anonymous pages, if needed,
1042                            and clear the area.  */
1043                         retval = set_brk(elf_bss + load_bias,
1044                                          elf_brk + load_bias,
1045                                          bss_prot);
1046                         if (retval)
1047                                 goto out_free_dentry;
1048                         nbyte = ELF_PAGEOFFSET(elf_bss);
1049                         if (nbyte) {
1050                                 nbyte = ELF_MIN_ALIGN - nbyte;
1051                                 if (nbyte > elf_brk - elf_bss)
1052                                         nbyte = elf_brk - elf_bss;
1053                                 if (clear_user((void __user *)elf_bss +
1054                                                         load_bias, nbyte)) {
1055                                         /*
1056                                          * This bss-zeroing can fail if the ELF
1057                                          * file specifies odd protections. So
1058                                          * we don't check the return value
1059                                          */
1060                                 }
1061                         }
1062                 }
1063
1064                 elf_prot = make_prot(elf_ppnt->p_flags, &arch_state,
1065                                      !!interpreter, false);
1066
1067                 elf_flags = MAP_PRIVATE | MAP_DENYWRITE | MAP_EXECUTABLE;
1068
1069                 vaddr = elf_ppnt->p_vaddr;
1070                 /*
1071                  * If we are loading ET_EXEC or we have already performed
1072                  * the ET_DYN load_addr calculations, proceed normally.
1073                  */
1074                 if (elf_ex->e_type == ET_EXEC || load_addr_set) {
1075                         elf_flags |= MAP_FIXED;
1076                 } else if (elf_ex->e_type == ET_DYN) {
1077                         /*
1078                          * This logic is run once for the first LOAD Program
1079                          * Header for ET_DYN binaries to calculate the
1080                          * randomization (load_bias) for all the LOAD
1081                          * Program Headers, and to calculate the entire
1082                          * size of the ELF mapping (total_size). (Note that
1083                          * load_addr_set is set to true later once the
1084                          * initial mapping is performed.)
1085                          *
1086                          * There are effectively two types of ET_DYN
1087                          * binaries: programs (i.e. PIE: ET_DYN with INTERP)
1088                          * and loaders (ET_DYN without INTERP, since they
1089                          * _are_ the ELF interpreter). The loaders must
1090                          * be loaded away from programs since the program
1091                          * may otherwise collide with the loader (especially
1092                          * for ET_EXEC which does not have a randomized
1093                          * position). For example to handle invocations of
1094                          * "./ld.so someprog" to test out a new version of
1095                          * the loader, the subsequent program that the
1096                          * loader loads must avoid the loader itself, so
1097                          * they cannot share the same load range. Sufficient
1098                          * room for the brk must be allocated with the
1099                          * loader as well, since brk must be available with
1100                          * the loader.
1101                          *
1102                          * Therefore, programs are loaded offset from
1103                          * ELF_ET_DYN_BASE and loaders are loaded into the
1104                          * independently randomized mmap region (0 load_bias
1105                          * without MAP_FIXED).
1106                          */
1107                         if (interpreter) {
1108                                 load_bias = ELF_ET_DYN_BASE;
1109                                 if (current->flags & PF_RANDOMIZE)
1110                                         load_bias += arch_mmap_rnd();
1111                                 alignment = maximum_alignment(elf_phdata, elf_ex->e_phnum);
1112                                 if (alignment)
1113                                         load_bias &= ~(alignment - 1);
1114                                 elf_flags |= MAP_FIXED;
1115                         } else
1116                                 load_bias = 0;
1117
1118                         /*
1119                          * Since load_bias is used for all subsequent loading
1120                          * calculations, we must lower it by the first vaddr
1121                          * so that the remaining calculations based on the
1122                          * ELF vaddrs will be correctly offset. The result
1123                          * is then page aligned.
1124                          */
1125                         load_bias = ELF_PAGESTART(load_bias - vaddr);
1126
1127                         total_size = total_mapping_size(elf_phdata,
1128                                                         elf_ex->e_phnum);
1129                         if (!total_size) {
1130                                 retval = -EINVAL;
1131                                 goto out_free_dentry;
1132                         }
1133                 }
1134
1135                 error = elf_map(bprm->file, load_bias + vaddr, elf_ppnt,
1136                                 elf_prot, elf_flags, total_size);
1137                 if (BAD_ADDR(error)) {
1138                         retval = IS_ERR((void *)error) ?
1139                                 PTR_ERR((void*)error) : -EINVAL;
1140                         goto out_free_dentry;
1141                 }
1142
1143                 if (!load_addr_set) {
1144                         load_addr_set = 1;
1145                         load_addr = (elf_ppnt->p_vaddr - elf_ppnt->p_offset);
1146                         if (elf_ex->e_type == ET_DYN) {
1147                                 load_bias += error -
1148                                              ELF_PAGESTART(load_bias + vaddr);
1149                                 load_addr += load_bias;
1150                                 reloc_func_desc = load_bias;
1151                         }
1152                 }
1153                 k = elf_ppnt->p_vaddr;
1154                 if ((elf_ppnt->p_flags & PF_X) && k < start_code)
1155                         start_code = k;
1156                 if (start_data < k)
1157                         start_data = k;
1158
1159                 /*
1160                  * Check to see if the section's size will overflow the
1161                  * allowed task size. Note that p_filesz must always be
1162                  * <= p_memsz so it is only necessary to check p_memsz.
1163                  */
1164                 if (BAD_ADDR(k) || elf_ppnt->p_filesz > elf_ppnt->p_memsz ||
1165                     elf_ppnt->p_memsz > TASK_SIZE ||
1166                     TASK_SIZE - elf_ppnt->p_memsz < k) {
1167                         /* set_brk can never work. Avoid overflows. */
1168                         retval = -EINVAL;
1169                         goto out_free_dentry;
1170                 }
1171
1172                 k = elf_ppnt->p_vaddr + elf_ppnt->p_filesz;
1173
1174                 if (k > elf_bss)
1175                         elf_bss = k;
1176                 if ((elf_ppnt->p_flags & PF_X) && end_code < k)
1177                         end_code = k;
1178                 if (end_data < k)
1179                         end_data = k;
1180                 k = elf_ppnt->p_vaddr + elf_ppnt->p_memsz;
1181                 if (k > elf_brk) {
1182                         bss_prot = elf_prot;
1183                         elf_brk = k;
1184                 }
1185         }
1186
1187         e_entry = elf_ex->e_entry + load_bias;
1188         elf_bss += load_bias;
1189         elf_brk += load_bias;
1190         start_code += load_bias;
1191         end_code += load_bias;
1192         start_data += load_bias;
1193         end_data += load_bias;
1194
1195         /* Calling set_brk effectively mmaps the pages that we need
1196          * for the bss and break sections.  We must do this before
1197          * mapping in the interpreter, to make sure it doesn't wind
1198          * up getting placed where the bss needs to go.
1199          */
1200         retval = set_brk(elf_bss, elf_brk, bss_prot);
1201         if (retval)
1202                 goto out_free_dentry;
1203         if (likely(elf_bss != elf_brk) && unlikely(padzero(elf_bss))) {
1204                 retval = -EFAULT; /* Nobody gets to see this, but.. */
1205                 goto out_free_dentry;
1206         }
1207
1208         if (interpreter) {
1209                 elf_entry = load_elf_interp(interp_elf_ex,
1210                                             interpreter,
1211                                             load_bias, interp_elf_phdata,
1212                                             &arch_state);
1213                 if (!IS_ERR((void *)elf_entry)) {
1214                         /*
1215                          * load_elf_interp() returns relocation
1216                          * adjustment
1217                          */
1218                         interp_load_addr = elf_entry;
1219                         elf_entry += interp_elf_ex->e_entry;
1220                 }
1221                 if (BAD_ADDR(elf_entry)) {
1222                         retval = IS_ERR((void *)elf_entry) ?
1223                                         (int)elf_entry : -EINVAL;
1224                         goto out_free_dentry;
1225                 }
1226                 reloc_func_desc = interp_load_addr;
1227
1228                 allow_write_access(interpreter);
1229                 fput(interpreter);
1230
1231                 kfree(interp_elf_ex);
1232                 kfree(interp_elf_phdata);
1233         } else {
1234                 elf_entry = e_entry;
1235                 if (BAD_ADDR(elf_entry)) {
1236                         retval = -EINVAL;
1237                         goto out_free_dentry;
1238                 }
1239         }
1240
1241         kfree(elf_phdata);
1242
1243         set_binfmt(&elf_format);
1244
1245 #ifdef ARCH_HAS_SETUP_ADDITIONAL_PAGES
1246         retval = arch_setup_additional_pages(bprm, !!interpreter);
1247         if (retval < 0)
1248                 goto out;
1249 #endif /* ARCH_HAS_SETUP_ADDITIONAL_PAGES */
1250
1251         retval = create_elf_tables(bprm, elf_ex,
1252                           load_addr, interp_load_addr, e_entry);
1253         if (retval < 0)
1254                 goto out;
1255
1256         mm = current->mm;
1257         mm->end_code = end_code;
1258         mm->start_code = start_code;
1259         mm->start_data = start_data;
1260         mm->end_data = end_data;
1261         mm->start_stack = bprm->p;
1262
1263         if ((current->flags & PF_RANDOMIZE) && (randomize_va_space > 1)) {
1264                 /*
1265                  * For architectures with ELF randomization, when executing
1266                  * a loader directly (i.e. no interpreter listed in ELF
1267                  * headers), move the brk area out of the mmap region
1268                  * (since it grows up, and may collide early with the stack
1269                  * growing down), and into the unused ELF_ET_DYN_BASE region.
1270                  */
1271                 if (IS_ENABLED(CONFIG_ARCH_HAS_ELF_RANDOMIZE) &&
1272                     elf_ex->e_type == ET_DYN && !interpreter) {
1273                         mm->brk = mm->start_brk = ELF_ET_DYN_BASE;
1274                 }
1275
1276                 mm->brk = mm->start_brk = arch_randomize_brk(mm);
1277 #ifdef compat_brk_randomized
1278                 current->brk_randomized = 1;
1279 #endif
1280         }
1281
1282         if (current->personality & MMAP_PAGE_ZERO) {
1283                 /* Why this, you ask???  Well SVr4 maps page 0 as read-only,
1284                    and some applications "depend" upon this behavior.
1285                    Since we do not have the power to recompile these, we
1286                    emulate the SVr4 behavior. Sigh. */
1287                 error = vm_mmap(NULL, 0, PAGE_SIZE, PROT_READ | PROT_EXEC,
1288                                 MAP_FIXED | MAP_PRIVATE, 0);
1289         }
1290
1291         regs = current_pt_regs();
1292 #ifdef ELF_PLAT_INIT
1293         /*
1294          * The ABI may specify that certain registers be set up in special
1295          * ways (on i386 %edx is the address of a DT_FINI function, for
1296          * example.  In addition, it may also specify (eg, PowerPC64 ELF)
1297          * that the e_entry field is the address of the function descriptor
1298          * for the startup routine, rather than the address of the startup
1299          * routine itself.  This macro performs whatever initialization to
1300          * the regs structure is required as well as any relocations to the
1301          * function descriptor entries when executing dynamically links apps.
1302          */
1303         ELF_PLAT_INIT(regs, reloc_func_desc);
1304 #endif
1305
1306         finalize_exec(bprm);
1307         start_thread(regs, elf_entry, bprm->p);
1308         retval = 0;
1309 out:
1310         return retval;
1311
1312         /* error cleanup */
1313 out_free_dentry:
1314         kfree(interp_elf_ex);
1315         kfree(interp_elf_phdata);
1316         allow_write_access(interpreter);
1317         if (interpreter)
1318                 fput(interpreter);
1319 out_free_ph:
1320         kfree(elf_phdata);
1321         goto out;
1322 }
1323
1324 #ifdef CONFIG_USELIB
1325 /* This is really simpleminded and specialized - we are loading an
1326    a.out library that is given an ELF header. */
1327 static int load_elf_library(struct file *file)
1328 {
1329         struct elf_phdr *elf_phdata;
1330         struct elf_phdr *eppnt;
1331         unsigned long elf_bss, bss, len;
1332         int retval, error, i, j;
1333         struct elfhdr elf_ex;
1334
1335         error = -ENOEXEC;
1336         retval = elf_read(file, &elf_ex, sizeof(elf_ex), 0);
1337         if (retval < 0)
1338                 goto out;
1339
1340         if (memcmp(elf_ex.e_ident, ELFMAG, SELFMAG) != 0)
1341                 goto out;
1342
1343         /* First of all, some simple consistency checks */
1344         if (elf_ex.e_type != ET_EXEC || elf_ex.e_phnum > 2 ||
1345             !elf_check_arch(&elf_ex) || !file->f_op->mmap)
1346                 goto out;
1347         if (elf_check_fdpic(&elf_ex))
1348                 goto out;
1349
1350         /* Now read in all of the header information */
1351
1352         j = sizeof(struct elf_phdr) * elf_ex.e_phnum;
1353         /* j < ELF_MIN_ALIGN because elf_ex.e_phnum <= 2 */
1354
1355         error = -ENOMEM;
1356         elf_phdata = kmalloc(j, GFP_KERNEL);
1357         if (!elf_phdata)
1358                 goto out;
1359
1360         eppnt = elf_phdata;
1361         error = -ENOEXEC;
1362         retval = elf_read(file, eppnt, j, elf_ex.e_phoff);
1363         if (retval < 0)
1364                 goto out_free_ph;
1365
1366         for (j = 0, i = 0; i<elf_ex.e_phnum; i++)
1367                 if ((eppnt + i)->p_type == PT_LOAD)
1368                         j++;
1369         if (j != 1)
1370                 goto out_free_ph;
1371
1372         while (eppnt->p_type != PT_LOAD)
1373                 eppnt++;
1374
1375         /* Now use mmap to map the library into memory. */
1376         error = vm_mmap(file,
1377                         ELF_PAGESTART(eppnt->p_vaddr),
1378                         (eppnt->p_filesz +
1379                          ELF_PAGEOFFSET(eppnt->p_vaddr)),
1380                         PROT_READ | PROT_WRITE | PROT_EXEC,
1381                         MAP_FIXED_NOREPLACE | MAP_PRIVATE | MAP_DENYWRITE,
1382                         (eppnt->p_offset -
1383                          ELF_PAGEOFFSET(eppnt->p_vaddr)));
1384         if (error != ELF_PAGESTART(eppnt->p_vaddr))
1385                 goto out_free_ph;
1386
1387         elf_bss = eppnt->p_vaddr + eppnt->p_filesz;
1388         if (padzero(elf_bss)) {
1389                 error = -EFAULT;
1390                 goto out_free_ph;
1391         }
1392
1393         len = ELF_PAGEALIGN(eppnt->p_filesz + eppnt->p_vaddr);
1394         bss = ELF_PAGEALIGN(eppnt->p_memsz + eppnt->p_vaddr);
1395         if (bss > len) {
1396                 error = vm_brk(len, bss - len);
1397                 if (error)
1398                         goto out_free_ph;
1399         }
1400         error = 0;
1401
1402 out_free_ph:
1403         kfree(elf_phdata);
1404 out:
1405         return error;
1406 }
1407 #endif /* #ifdef CONFIG_USELIB */
1408
1409 #ifdef CONFIG_ELF_CORE
1410 /*
1411  * ELF core dumper
1412  *
1413  * Modelled on fs/exec.c:aout_core_dump()
1414  * Jeremy Fitzhardinge <jeremy@sw.oz.au>
1415  */
1416
1417 /* An ELF note in memory */
1418 struct memelfnote
1419 {
1420         const char *name;
1421         int type;
1422         unsigned int datasz;
1423         void *data;
1424 };
1425
1426 static int notesize(struct memelfnote *en)
1427 {
1428         int sz;
1429
1430         sz = sizeof(struct elf_note);
1431         sz += roundup(strlen(en->name) + 1, 4);
1432         sz += roundup(en->datasz, 4);
1433
1434         return sz;
1435 }
1436
1437 static int writenote(struct memelfnote *men, struct coredump_params *cprm)
1438 {
1439         struct elf_note en;
1440         en.n_namesz = strlen(men->name) + 1;
1441         en.n_descsz = men->datasz;
1442         en.n_type = men->type;
1443
1444         return dump_emit(cprm, &en, sizeof(en)) &&
1445             dump_emit(cprm, men->name, en.n_namesz) && dump_align(cprm, 4) &&
1446             dump_emit(cprm, men->data, men->datasz) && dump_align(cprm, 4);
1447 }
1448
1449 static void fill_elf_header(struct elfhdr *elf, int segs,
1450                             u16 machine, u32 flags)
1451 {
1452         memset(elf, 0, sizeof(*elf));
1453
1454         memcpy(elf->e_ident, ELFMAG, SELFMAG);
1455         elf->e_ident[EI_CLASS] = ELF_CLASS;
1456         elf->e_ident[EI_DATA] = ELF_DATA;
1457         elf->e_ident[EI_VERSION] = EV_CURRENT;
1458         elf->e_ident[EI_OSABI] = ELF_OSABI;
1459
1460         elf->e_type = ET_CORE;
1461         elf->e_machine = machine;
1462         elf->e_version = EV_CURRENT;
1463         elf->e_phoff = sizeof(struct elfhdr);
1464         elf->e_flags = flags;
1465         elf->e_ehsize = sizeof(struct elfhdr);
1466         elf->e_phentsize = sizeof(struct elf_phdr);
1467         elf->e_phnum = segs;
1468 }
1469
1470 static void fill_elf_note_phdr(struct elf_phdr *phdr, int sz, loff_t offset)
1471 {
1472         phdr->p_type = PT_NOTE;
1473         phdr->p_offset = offset;
1474         phdr->p_vaddr = 0;
1475         phdr->p_paddr = 0;
1476         phdr->p_filesz = sz;
1477         phdr->p_memsz = 0;
1478         phdr->p_flags = 0;
1479         phdr->p_align = 0;
1480 }
1481
1482 static void fill_note(struct memelfnote *note, const char *name, int type, 
1483                 unsigned int sz, void *data)
1484 {
1485         note->name = name;
1486         note->type = type;
1487         note->datasz = sz;
1488         note->data = data;
1489 }
1490
1491 /*
1492  * fill up all the fields in prstatus from the given task struct, except
1493  * registers which need to be filled up separately.
1494  */
1495 static void fill_prstatus(struct elf_prstatus *prstatus,
1496                 struct task_struct *p, long signr)
1497 {
1498         prstatus->pr_info.si_signo = prstatus->pr_cursig = signr;
1499         prstatus->pr_sigpend = p->pending.signal.sig[0];
1500         prstatus->pr_sighold = p->blocked.sig[0];
1501         rcu_read_lock();
1502         prstatus->pr_ppid = task_pid_vnr(rcu_dereference(p->real_parent));
1503         rcu_read_unlock();
1504         prstatus->pr_pid = task_pid_vnr(p);
1505         prstatus->pr_pgrp = task_pgrp_vnr(p);
1506         prstatus->pr_sid = task_session_vnr(p);
1507         if (thread_group_leader(p)) {
1508                 struct task_cputime cputime;
1509
1510                 /*
1511                  * This is the record for the group leader.  It shows the
1512                  * group-wide total, not its individual thread total.
1513                  */
1514                 thread_group_cputime(p, &cputime);
1515                 prstatus->pr_utime = ns_to_kernel_old_timeval(cputime.utime);
1516                 prstatus->pr_stime = ns_to_kernel_old_timeval(cputime.stime);
1517         } else {
1518                 u64 utime, stime;
1519
1520                 task_cputime(p, &utime, &stime);
1521                 prstatus->pr_utime = ns_to_kernel_old_timeval(utime);
1522                 prstatus->pr_stime = ns_to_kernel_old_timeval(stime);
1523         }
1524
1525         prstatus->pr_cutime = ns_to_kernel_old_timeval(p->signal->cutime);
1526         prstatus->pr_cstime = ns_to_kernel_old_timeval(p->signal->cstime);
1527 }
1528
1529 static int fill_psinfo(struct elf_prpsinfo *psinfo, struct task_struct *p,
1530                        struct mm_struct *mm)
1531 {
1532         const struct cred *cred;
1533         unsigned int i, len;
1534         
1535         /* first copy the parameters from user space */
1536         memset(psinfo, 0, sizeof(struct elf_prpsinfo));
1537
1538         len = mm->arg_end - mm->arg_start;
1539         if (len >= ELF_PRARGSZ)
1540                 len = ELF_PRARGSZ-1;
1541         if (copy_from_user(&psinfo->pr_psargs,
1542                            (const char __user *)mm->arg_start, len))
1543                 return -EFAULT;
1544         for(i = 0; i < len; i++)
1545                 if (psinfo->pr_psargs[i] == 0)
1546                         psinfo->pr_psargs[i] = ' ';
1547         psinfo->pr_psargs[len] = 0;
1548
1549         rcu_read_lock();
1550         psinfo->pr_ppid = task_pid_vnr(rcu_dereference(p->real_parent));
1551         rcu_read_unlock();
1552         psinfo->pr_pid = task_pid_vnr(p);
1553         psinfo->pr_pgrp = task_pgrp_vnr(p);
1554         psinfo->pr_sid = task_session_vnr(p);
1555
1556         i = p->state ? ffz(~p->state) + 1 : 0;
1557         psinfo->pr_state = i;
1558         psinfo->pr_sname = (i > 5) ? '.' : "RSDTZW"[i];
1559         psinfo->pr_zomb = psinfo->pr_sname == 'Z';
1560         psinfo->pr_nice = task_nice(p);
1561         psinfo->pr_flag = p->flags;
1562         rcu_read_lock();
1563         cred = __task_cred(p);
1564         SET_UID(psinfo->pr_uid, from_kuid_munged(cred->user_ns, cred->uid));
1565         SET_GID(psinfo->pr_gid, from_kgid_munged(cred->user_ns, cred->gid));
1566         rcu_read_unlock();
1567         strncpy(psinfo->pr_fname, p->comm, sizeof(psinfo->pr_fname));
1568         
1569         return 0;
1570 }
1571
1572 static void fill_auxv_note(struct memelfnote *note, struct mm_struct *mm)
1573 {
1574         elf_addr_t *auxv = (elf_addr_t *) mm->saved_auxv;
1575         int i = 0;
1576         do
1577                 i += 2;
1578         while (auxv[i - 2] != AT_NULL);
1579         fill_note(note, "CORE", NT_AUXV, i * sizeof(elf_addr_t), auxv);
1580 }
1581
1582 static void fill_siginfo_note(struct memelfnote *note, user_siginfo_t *csigdata,
1583                 const kernel_siginfo_t *siginfo)
1584 {
1585         copy_siginfo_to_external(csigdata, siginfo);
1586         fill_note(note, "CORE", NT_SIGINFO, sizeof(*csigdata), csigdata);
1587 }
1588
1589 #define MAX_FILE_NOTE_SIZE (4*1024*1024)
1590 /*
1591  * Format of NT_FILE note:
1592  *
1593  * long count     -- how many files are mapped
1594  * long page_size -- units for file_ofs
1595  * array of [COUNT] elements of
1596  *   long start
1597  *   long end
1598  *   long file_ofs
1599  * followed by COUNT filenames in ASCII: "FILE1" NUL "FILE2" NUL...
1600  */
1601 static int fill_files_note(struct memelfnote *note)
1602 {
1603         struct mm_struct *mm = current->mm;
1604         struct vm_area_struct *vma;
1605         unsigned count, size, names_ofs, remaining, n;
1606         user_long_t *data;
1607         user_long_t *start_end_ofs;
1608         char *name_base, *name_curpos;
1609
1610         /* *Estimated* file count and total data size needed */
1611         count = mm->map_count;
1612         if (count > UINT_MAX / 64)
1613                 return -EINVAL;
1614         size = count * 64;
1615
1616         names_ofs = (2 + 3 * count) * sizeof(data[0]);
1617  alloc:
1618         if (size >= MAX_FILE_NOTE_SIZE) /* paranoia check */
1619                 return -EINVAL;
1620         size = round_up(size, PAGE_SIZE);
1621         /*
1622          * "size" can be 0 here legitimately.
1623          * Let it ENOMEM and omit NT_FILE section which will be empty anyway.
1624          */
1625         data = kvmalloc(size, GFP_KERNEL);
1626         if (ZERO_OR_NULL_PTR(data))
1627                 return -ENOMEM;
1628
1629         start_end_ofs = data + 2;
1630         name_base = name_curpos = ((char *)data) + names_ofs;
1631         remaining = size - names_ofs;
1632         count = 0;
1633         for (vma = mm->mmap; vma != NULL; vma = vma->vm_next) {
1634                 struct file *file;
1635                 const char *filename;
1636
1637                 file = vma->vm_file;
1638                 if (!file)
1639                         continue;
1640                 filename = file_path(file, name_curpos, remaining);
1641                 if (IS_ERR(filename)) {
1642                         if (PTR_ERR(filename) == -ENAMETOOLONG) {
1643                                 kvfree(data);
1644                                 size = size * 5 / 4;
1645                                 goto alloc;
1646                         }
1647                         continue;
1648                 }
1649
1650                 /* file_path() fills at the end, move name down */
1651                 /* n = strlen(filename) + 1: */
1652                 n = (name_curpos + remaining) - filename;
1653                 remaining = filename - name_curpos;
1654                 memmove(name_curpos, filename, n);
1655                 name_curpos += n;
1656
1657                 *start_end_ofs++ = vma->vm_start;
1658                 *start_end_ofs++ = vma->vm_end;
1659                 *start_end_ofs++ = vma->vm_pgoff;
1660                 count++;
1661         }
1662
1663         /* Now we know exact count of files, can store it */
1664         data[0] = count;
1665         data[1] = PAGE_SIZE;
1666         /*
1667          * Count usually is less than mm->map_count,
1668          * we need to move filenames down.
1669          */
1670         n = mm->map_count - count;
1671         if (n != 0) {
1672                 unsigned shift_bytes = n * 3 * sizeof(data[0]);
1673                 memmove(name_base - shift_bytes, name_base,
1674                         name_curpos - name_base);
1675                 name_curpos -= shift_bytes;
1676         }
1677
1678         size = name_curpos - (char *)data;
1679         fill_note(note, "CORE", NT_FILE, size, data);
1680         return 0;
1681 }
1682
1683 #ifdef CORE_DUMP_USE_REGSET
1684 #include <linux/regset.h>
1685
1686 struct elf_thread_core_info {
1687         struct elf_thread_core_info *next;
1688         struct task_struct *task;
1689         struct elf_prstatus prstatus;
1690         struct memelfnote notes[0];
1691 };
1692
1693 struct elf_note_info {
1694         struct elf_thread_core_info *thread;
1695         struct memelfnote psinfo;
1696         struct memelfnote signote;
1697         struct memelfnote auxv;
1698         struct memelfnote files;
1699         user_siginfo_t csigdata;
1700         size_t size;
1701         int thread_notes;
1702 };
1703
1704 /*
1705  * When a regset has a writeback hook, we call it on each thread before
1706  * dumping user memory.  On register window machines, this makes sure the
1707  * user memory backing the register data is up to date before we read it.
1708  */
1709 static void do_thread_regset_writeback(struct task_struct *task,
1710                                        const struct user_regset *regset)
1711 {
1712         if (regset->writeback)
1713                 regset->writeback(task, regset, 1);
1714 }
1715
1716 #ifndef PRSTATUS_SIZE
1717 #define PRSTATUS_SIZE(S, R) sizeof(S)
1718 #endif
1719
1720 #ifndef SET_PR_FPVALID
1721 #define SET_PR_FPVALID(S, V, R) ((S)->pr_fpvalid = (V))
1722 #endif
1723
1724 static int fill_thread_core_info(struct elf_thread_core_info *t,
1725                                  const struct user_regset_view *view,
1726                                  long signr, size_t *total)
1727 {
1728         unsigned int i;
1729         int regset0_size;
1730
1731         /*
1732          * NT_PRSTATUS is the one special case, because the regset data
1733          * goes into the pr_reg field inside the note contents, rather
1734          * than being the whole note contents.  We fill the reset in here.
1735          * We assume that regset 0 is NT_PRSTATUS.
1736          */
1737         fill_prstatus(&t->prstatus, t->task, signr);
1738         regset0_size = regset_get(t->task, &view->regsets[0],
1739                    sizeof(t->prstatus.pr_reg), &t->prstatus.pr_reg);
1740         if (regset0_size < 0)
1741                 return 0;
1742
1743         fill_note(&t->notes[0], "CORE", NT_PRSTATUS,
1744                   PRSTATUS_SIZE(t->prstatus, regset0_size), &t->prstatus);
1745         *total += notesize(&t->notes[0]);
1746
1747         do_thread_regset_writeback(t->task, &view->regsets[0]);
1748
1749         /*
1750          * Each other regset might generate a note too.  For each regset
1751          * that has no core_note_type or is inactive, we leave t->notes[i]
1752          * all zero and we'll know to skip writing it later.
1753          */
1754         for (i = 1; i < view->n; ++i) {
1755                 const struct user_regset *regset = &view->regsets[i];
1756                 int note_type = regset->core_note_type;
1757                 bool is_fpreg = note_type == NT_PRFPREG;
1758                 void *data;
1759                 int ret;
1760
1761                 do_thread_regset_writeback(t->task, regset);
1762                 if (!note_type) // not for coredumps
1763                         continue;
1764                 if (regset->active && regset->active(t->task, regset) <= 0)
1765                         continue;
1766
1767                 ret = regset_get_alloc(t->task, regset, ~0U, &data);
1768                 if (ret < 0)
1769                         continue;
1770
1771                 if (is_fpreg)
1772                         SET_PR_FPVALID(&t->prstatus, 1, regset0_size);
1773
1774                 fill_note(&t->notes[i], is_fpreg ? "CORE" : "LINUX",
1775                           note_type, ret, data);
1776
1777                 *total += notesize(&t->notes[i]);
1778         }
1779
1780         return 1;
1781 }
1782
1783 static int fill_note_info(struct elfhdr *elf, int phdrs,
1784                           struct elf_note_info *info,
1785                           const kernel_siginfo_t *siginfo, struct pt_regs *regs)
1786 {
1787         struct task_struct *dump_task = current;
1788         const struct user_regset_view *view = task_user_regset_view(dump_task);
1789         struct elf_thread_core_info *t;
1790         struct elf_prpsinfo *psinfo;
1791         struct core_thread *ct;
1792         unsigned int i;
1793
1794         info->size = 0;
1795         info->thread = NULL;
1796
1797         psinfo = kmalloc(sizeof(*psinfo), GFP_KERNEL);
1798         if (psinfo == NULL) {
1799                 info->psinfo.data = NULL; /* So we don't free this wrongly */
1800                 return 0;
1801         }
1802
1803         fill_note(&info->psinfo, "CORE", NT_PRPSINFO, sizeof(*psinfo), psinfo);
1804
1805         /*
1806          * Figure out how many notes we're going to need for each thread.
1807          */
1808         info->thread_notes = 0;
1809         for (i = 0; i < view->n; ++i)
1810                 if (view->regsets[i].core_note_type != 0)
1811                         ++info->thread_notes;
1812
1813         /*
1814          * Sanity check.  We rely on regset 0 being in NT_PRSTATUS,
1815          * since it is our one special case.
1816          */
1817         if (unlikely(info->thread_notes == 0) ||
1818             unlikely(view->regsets[0].core_note_type != NT_PRSTATUS)) {
1819                 WARN_ON(1);
1820                 return 0;
1821         }
1822
1823         /*
1824          * Initialize the ELF file header.
1825          */
1826         fill_elf_header(elf, phdrs,
1827                         view->e_machine, view->e_flags);
1828
1829         /*
1830          * Allocate a structure for each thread.
1831          */
1832         for (ct = &dump_task->mm->core_state->dumper; ct; ct = ct->next) {
1833                 t = kzalloc(offsetof(struct elf_thread_core_info,
1834                                      notes[info->thread_notes]),
1835                             GFP_KERNEL);
1836                 if (unlikely(!t))
1837                         return 0;
1838
1839                 t->task = ct->task;
1840                 if (ct->task == dump_task || !info->thread) {
1841                         t->next = info->thread;
1842                         info->thread = t;
1843                 } else {
1844                         /*
1845                          * Make sure to keep the original task at
1846                          * the head of the list.
1847                          */
1848                         t->next = info->thread->next;
1849                         info->thread->next = t;
1850                 }
1851         }
1852
1853         /*
1854          * Now fill in each thread's information.
1855          */
1856         for (t = info->thread; t != NULL; t = t->next)
1857                 if (!fill_thread_core_info(t, view, siginfo->si_signo, &info->size))
1858                         return 0;
1859
1860         /*
1861          * Fill in the two process-wide notes.
1862          */
1863         fill_psinfo(psinfo, dump_task->group_leader, dump_task->mm);
1864         info->size += notesize(&info->psinfo);
1865
1866         fill_siginfo_note(&info->signote, &info->csigdata, siginfo);
1867         info->size += notesize(&info->signote);
1868
1869         fill_auxv_note(&info->auxv, current->mm);
1870         info->size += notesize(&info->auxv);
1871
1872         if (fill_files_note(&info->files) == 0)
1873                 info->size += notesize(&info->files);
1874
1875         return 1;
1876 }
1877
1878 static size_t get_note_info_size(struct elf_note_info *info)
1879 {
1880         return info->size;
1881 }
1882
1883 /*
1884  * Write all the notes for each thread.  When writing the first thread, the
1885  * process-wide notes are interleaved after the first thread-specific note.
1886  */
1887 static int write_note_info(struct elf_note_info *info,
1888                            struct coredump_params *cprm)
1889 {
1890         bool first = true;
1891         struct elf_thread_core_info *t = info->thread;
1892
1893         do {
1894                 int i;
1895
1896                 if (!writenote(&t->notes[0], cprm))
1897                         return 0;
1898
1899                 if (first && !writenote(&info->psinfo, cprm))
1900                         return 0;
1901                 if (first && !writenote(&info->signote, cprm))
1902                         return 0;
1903                 if (first && !writenote(&info->auxv, cprm))
1904                         return 0;
1905                 if (first && info->files.data &&
1906                                 !writenote(&info->files, cprm))
1907                         return 0;
1908
1909                 for (i = 1; i < info->thread_notes; ++i)
1910                         if (t->notes[i].data &&
1911                             !writenote(&t->notes[i], cprm))
1912                                 return 0;
1913
1914                 first = false;
1915                 t = t->next;
1916         } while (t);
1917
1918         return 1;
1919 }
1920
1921 static void free_note_info(struct elf_note_info *info)
1922 {
1923         struct elf_thread_core_info *threads = info->thread;
1924         while (threads) {
1925                 unsigned int i;
1926                 struct elf_thread_core_info *t = threads;
1927                 threads = t->next;
1928                 WARN_ON(t->notes[0].data && t->notes[0].data != &t->prstatus);
1929                 for (i = 1; i < info->thread_notes; ++i)
1930                         kfree(t->notes[i].data);
1931                 kfree(t);
1932         }
1933         kfree(info->psinfo.data);
1934         kvfree(info->files.data);
1935 }
1936
1937 #else
1938
1939 /* Here is the structure in which status of each thread is captured. */
1940 struct elf_thread_status
1941 {
1942         struct list_head list;
1943         struct elf_prstatus prstatus;   /* NT_PRSTATUS */
1944         elf_fpregset_t fpu;             /* NT_PRFPREG */
1945         struct task_struct *thread;
1946         struct memelfnote notes[3];
1947         int num_notes;
1948 };
1949
1950 /*
1951  * In order to add the specific thread information for the elf file format,
1952  * we need to keep a linked list of every threads pr_status and then create
1953  * a single section for them in the final core file.
1954  */
1955 static int elf_dump_thread_status(long signr, struct elf_thread_status *t)
1956 {
1957         int sz = 0;
1958         struct task_struct *p = t->thread;
1959         t->num_notes = 0;
1960
1961         fill_prstatus(&t->prstatus, p, signr);
1962         elf_core_copy_task_regs(p, &t->prstatus.pr_reg);        
1963         
1964         fill_note(&t->notes[0], "CORE", NT_PRSTATUS, sizeof(t->prstatus),
1965                   &(t->prstatus));
1966         t->num_notes++;
1967         sz += notesize(&t->notes[0]);
1968
1969         if ((t->prstatus.pr_fpvalid = elf_core_copy_task_fpregs(p, NULL,
1970                                                                 &t->fpu))) {
1971                 fill_note(&t->notes[1], "CORE", NT_PRFPREG, sizeof(t->fpu),
1972                           &(t->fpu));
1973                 t->num_notes++;
1974                 sz += notesize(&t->notes[1]);
1975         }
1976         return sz;
1977 }
1978
1979 struct elf_note_info {
1980         struct memelfnote *notes;
1981         struct memelfnote *notes_files;
1982         struct elf_prstatus *prstatus;  /* NT_PRSTATUS */
1983         struct elf_prpsinfo *psinfo;    /* NT_PRPSINFO */
1984         struct list_head thread_list;
1985         elf_fpregset_t *fpu;
1986         user_siginfo_t csigdata;
1987         int thread_status_size;
1988         int numnote;
1989 };
1990
1991 static int elf_note_info_init(struct elf_note_info *info)
1992 {
1993         memset(info, 0, sizeof(*info));
1994         INIT_LIST_HEAD(&info->thread_list);
1995
1996         /* Allocate space for ELF notes */
1997         info->notes = kmalloc_array(8, sizeof(struct memelfnote), GFP_KERNEL);
1998         if (!info->notes)
1999                 return 0;
2000         info->psinfo = kmalloc(sizeof(*info->psinfo), GFP_KERNEL);
2001         if (!info->psinfo)
2002                 return 0;
2003         info->prstatus = kmalloc(sizeof(*info->prstatus), GFP_KERNEL);
2004         if (!info->prstatus)
2005                 return 0;
2006         info->fpu = kmalloc(sizeof(*info->fpu), GFP_KERNEL);
2007         if (!info->fpu)
2008                 return 0;
2009         return 1;
2010 }
2011
2012 static int fill_note_info(struct elfhdr *elf, int phdrs,
2013                           struct elf_note_info *info,
2014                           const kernel_siginfo_t *siginfo, struct pt_regs *regs)
2015 {
2016         struct core_thread *ct;
2017         struct elf_thread_status *ets;
2018
2019         if (!elf_note_info_init(info))
2020                 return 0;
2021
2022         for (ct = current->mm->core_state->dumper.next;
2023                                         ct; ct = ct->next) {
2024                 ets = kzalloc(sizeof(*ets), GFP_KERNEL);
2025                 if (!ets)
2026                         return 0;
2027
2028                 ets->thread = ct->task;
2029                 list_add(&ets->list, &info->thread_list);
2030         }
2031
2032         list_for_each_entry(ets, &info->thread_list, list) {
2033                 int sz;
2034
2035                 sz = elf_dump_thread_status(siginfo->si_signo, ets);
2036                 info->thread_status_size += sz;
2037         }
2038         /* now collect the dump for the current */
2039         memset(info->prstatus, 0, sizeof(*info->prstatus));
2040         fill_prstatus(info->prstatus, current, siginfo->si_signo);
2041         elf_core_copy_regs(&info->prstatus->pr_reg, regs);
2042
2043         /* Set up header */
2044         fill_elf_header(elf, phdrs, ELF_ARCH, ELF_CORE_EFLAGS);
2045
2046         /*
2047          * Set up the notes in similar form to SVR4 core dumps made
2048          * with info from their /proc.
2049          */
2050
2051         fill_note(info->notes + 0, "CORE", NT_PRSTATUS,
2052                   sizeof(*info->prstatus), info->prstatus);
2053         fill_psinfo(info->psinfo, current->group_leader, current->mm);
2054         fill_note(info->notes + 1, "CORE", NT_PRPSINFO,
2055                   sizeof(*info->psinfo), info->psinfo);
2056
2057         fill_siginfo_note(info->notes + 2, &info->csigdata, siginfo);
2058         fill_auxv_note(info->notes + 3, current->mm);
2059         info->numnote = 4;
2060
2061         if (fill_files_note(info->notes + info->numnote) == 0) {
2062                 info->notes_files = info->notes + info->numnote;
2063                 info->numnote++;
2064         }
2065
2066         /* Try to dump the FPU. */
2067         info->prstatus->pr_fpvalid = elf_core_copy_task_fpregs(current, regs,
2068                                                                info->fpu);
2069         if (info->prstatus->pr_fpvalid)
2070                 fill_note(info->notes + info->numnote++,
2071                           "CORE", NT_PRFPREG, sizeof(*info->fpu), info->fpu);
2072         return 1;
2073 }
2074
2075 static size_t get_note_info_size(struct elf_note_info *info)
2076 {
2077         int sz = 0;
2078         int i;
2079
2080         for (i = 0; i < info->numnote; i++)
2081                 sz += notesize(info->notes + i);
2082
2083         sz += info->thread_status_size;
2084
2085         return sz;
2086 }
2087
2088 static int write_note_info(struct elf_note_info *info,
2089                            struct coredump_params *cprm)
2090 {
2091         struct elf_thread_status *ets;
2092         int i;
2093
2094         for (i = 0; i < info->numnote; i++)
2095                 if (!writenote(info->notes + i, cprm))
2096                         return 0;
2097
2098         /* write out the thread status notes section */
2099         list_for_each_entry(ets, &info->thread_list, list) {
2100                 for (i = 0; i < ets->num_notes; i++)
2101                         if (!writenote(&ets->notes[i], cprm))
2102                                 return 0;
2103         }
2104
2105         return 1;
2106 }
2107
2108 static void free_note_info(struct elf_note_info *info)
2109 {
2110         while (!list_empty(&info->thread_list)) {
2111                 struct list_head *tmp = info->thread_list.next;
2112                 list_del(tmp);
2113                 kfree(list_entry(tmp, struct elf_thread_status, list));
2114         }
2115
2116         /* Free data possibly allocated by fill_files_note(): */
2117         if (info->notes_files)
2118                 kvfree(info->notes_files->data);
2119
2120         kfree(info->prstatus);
2121         kfree(info->psinfo);
2122         kfree(info->notes);
2123         kfree(info->fpu);
2124 }
2125
2126 #endif
2127
2128 static void fill_extnum_info(struct elfhdr *elf, struct elf_shdr *shdr4extnum,
2129                              elf_addr_t e_shoff, int segs)
2130 {
2131         elf->e_shoff = e_shoff;
2132         elf->e_shentsize = sizeof(*shdr4extnum);
2133         elf->e_shnum = 1;
2134         elf->e_shstrndx = SHN_UNDEF;
2135
2136         memset(shdr4extnum, 0, sizeof(*shdr4extnum));
2137
2138         shdr4extnum->sh_type = SHT_NULL;
2139         shdr4extnum->sh_size = elf->e_shnum;
2140         shdr4extnum->sh_link = elf->e_shstrndx;
2141         shdr4extnum->sh_info = segs;
2142 }
2143
2144 /*
2145  * Actual dumper
2146  *
2147  * This is a two-pass process; first we find the offsets of the bits,
2148  * and then they are actually written out.  If we run out of core limit
2149  * we just truncate.
2150  */
2151 static int elf_core_dump(struct coredump_params *cprm)
2152 {
2153         int has_dumped = 0;
2154         int vma_count, segs, i;
2155         size_t vma_data_size;
2156         struct elfhdr elf;
2157         loff_t offset = 0, dataoff;
2158         struct elf_note_info info = { };
2159         struct elf_phdr *phdr4note = NULL;
2160         struct elf_shdr *shdr4extnum = NULL;
2161         Elf_Half e_phnum;
2162         elf_addr_t e_shoff;
2163         struct core_vma_metadata *vma_meta;
2164
2165         if (dump_vma_snapshot(cprm, &vma_count, &vma_meta, &vma_data_size))
2166                 return 0;
2167
2168         /*
2169          * The number of segs are recored into ELF header as 16bit value.
2170          * Please check DEFAULT_MAX_MAP_COUNT definition when you modify here.
2171          */
2172         segs = vma_count + elf_core_extra_phdrs();
2173
2174         /* for notes section */
2175         segs++;
2176
2177         /* If segs > PN_XNUM(0xffff), then e_phnum overflows. To avoid
2178          * this, kernel supports extended numbering. Have a look at
2179          * include/linux/elf.h for further information. */
2180         e_phnum = segs > PN_XNUM ? PN_XNUM : segs;
2181
2182         /*
2183          * Collect all the non-memory information about the process for the
2184          * notes.  This also sets up the file header.
2185          */
2186         if (!fill_note_info(&elf, e_phnum, &info, cprm->siginfo, cprm->regs))
2187                 goto end_coredump;
2188
2189         has_dumped = 1;
2190
2191         offset += sizeof(elf);                          /* Elf header */
2192         offset += segs * sizeof(struct elf_phdr);       /* Program headers */
2193
2194         /* Write notes phdr entry */
2195         {
2196                 size_t sz = get_note_info_size(&info);
2197
2198                 sz += elf_coredump_extra_notes_size();
2199
2200                 phdr4note = kmalloc(sizeof(*phdr4note), GFP_KERNEL);
2201                 if (!phdr4note)
2202                         goto end_coredump;
2203
2204                 fill_elf_note_phdr(phdr4note, sz, offset);
2205                 offset += sz;
2206         }
2207
2208         dataoff = offset = roundup(offset, ELF_EXEC_PAGESIZE);
2209
2210         offset += vma_data_size;
2211         offset += elf_core_extra_data_size();
2212         e_shoff = offset;
2213
2214         if (e_phnum == PN_XNUM) {
2215                 shdr4extnum = kmalloc(sizeof(*shdr4extnum), GFP_KERNEL);
2216                 if (!shdr4extnum)
2217                         goto end_coredump;
2218                 fill_extnum_info(&elf, shdr4extnum, e_shoff, segs);
2219         }
2220
2221         offset = dataoff;
2222
2223         if (!dump_emit(cprm, &elf, sizeof(elf)))
2224                 goto end_coredump;
2225
2226         if (!dump_emit(cprm, phdr4note, sizeof(*phdr4note)))
2227                 goto end_coredump;
2228
2229         /* Write program headers for segments dump */
2230         for (i = 0; i < vma_count; i++) {
2231                 struct core_vma_metadata *meta = vma_meta + i;
2232                 struct elf_phdr phdr;
2233
2234                 phdr.p_type = PT_LOAD;
2235                 phdr.p_offset = offset;
2236                 phdr.p_vaddr = meta->start;
2237                 phdr.p_paddr = 0;
2238                 phdr.p_filesz = meta->dump_size;
2239                 phdr.p_memsz = meta->end - meta->start;
2240                 offset += phdr.p_filesz;
2241                 phdr.p_flags = 0;
2242                 if (meta->flags & VM_READ)
2243                         phdr.p_flags |= PF_R;
2244                 if (meta->flags & VM_WRITE)
2245                         phdr.p_flags |= PF_W;
2246                 if (meta->flags & VM_EXEC)
2247                         phdr.p_flags |= PF_X;
2248                 phdr.p_align = ELF_EXEC_PAGESIZE;
2249
2250                 if (!dump_emit(cprm, &phdr, sizeof(phdr)))
2251                         goto end_coredump;
2252         }
2253
2254         if (!elf_core_write_extra_phdrs(cprm, offset))
2255                 goto end_coredump;
2256
2257         /* write out the notes section */
2258         if (!write_note_info(&info, cprm))
2259                 goto end_coredump;
2260
2261         if (elf_coredump_extra_notes_write(cprm))
2262                 goto end_coredump;
2263
2264         /* Align to page */
2265         if (!dump_skip(cprm, dataoff - cprm->pos))
2266                 goto end_coredump;
2267
2268         for (i = 0; i < vma_count; i++) {
2269                 struct core_vma_metadata *meta = vma_meta + i;
2270
2271                 if (!dump_user_range(cprm, meta->start, meta->dump_size))
2272                         goto end_coredump;
2273         }
2274         dump_truncate(cprm);
2275
2276         if (!elf_core_write_extra_data(cprm))
2277                 goto end_coredump;
2278
2279         if (e_phnum == PN_XNUM) {
2280                 if (!dump_emit(cprm, shdr4extnum, sizeof(*shdr4extnum)))
2281                         goto end_coredump;
2282         }
2283
2284 end_coredump:
2285         free_note_info(&info);
2286         kfree(shdr4extnum);
2287         kvfree(vma_meta);
2288         kfree(phdr4note);
2289         return has_dumped;
2290 }
2291
2292 #endif          /* CONFIG_ELF_CORE */
2293
2294 static int __init init_elf_binfmt(void)
2295 {
2296         register_binfmt(&elf_format);
2297         return 0;
2298 }
2299
2300 static void __exit exit_elf_binfmt(void)
2301 {
2302         /* Remove the COFF and ELF loaders. */
2303         unregister_binfmt(&elf_format);
2304 }
2305
2306 core_initcall(init_elf_binfmt);
2307 module_exit(exit_elf_binfmt);
2308 MODULE_LICENSE("GPL");