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