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