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