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