LCOV - code coverage report
Current view: top level - fs - exec.c (source / functions) Hit Total Coverage
Test: coverage.info Lines: 387 543 71.3 %
Date: 2014-02-18 Functions: 36 40 90.0 %
Branches: 184 302 60.9 %

           Branch data     Line data    Source code
       1                 :            : /*
       2                 :            :  *  linux/fs/exec.c
       3                 :            :  *
       4                 :            :  *  Copyright (C) 1991, 1992  Linus Torvalds
       5                 :            :  */
       6                 :            : 
       7                 :            : /*
       8                 :            :  * #!-checking implemented by tytso.
       9                 :            :  */
      10                 :            : /*
      11                 :            :  * Demand-loading implemented 01.12.91 - no need to read anything but
      12                 :            :  * the header into memory. The inode of the executable is put into
      13                 :            :  * "current->executable", and page faults do the actual loading. Clean.
      14                 :            :  *
      15                 :            :  * Once more I can proudly say that linux stood up to being changed: it
      16                 :            :  * was less than 2 hours work to get demand-loading completely implemented.
      17                 :            :  *
      18                 :            :  * Demand loading changed July 1993 by Eric Youngdale.   Use mmap instead,
      19                 :            :  * current->executable is only used by the procfs.  This allows a dispatch
      20                 :            :  * table to check for several different types  of binary formats.  We keep
      21                 :            :  * trying until we recognize the file or we run out of supported binary
      22                 :            :  * formats. 
      23                 :            :  */
      24                 :            : 
      25                 :            : #include <linux/slab.h>
      26                 :            : #include <linux/file.h>
      27                 :            : #include <linux/fdtable.h>
      28                 :            : #include <linux/mm.h>
      29                 :            : #include <linux/stat.h>
      30                 :            : #include <linux/fcntl.h>
      31                 :            : #include <linux/swap.h>
      32                 :            : #include <linux/string.h>
      33                 :            : #include <linux/init.h>
      34                 :            : #include <linux/pagemap.h>
      35                 :            : #include <linux/perf_event.h>
      36                 :            : #include <linux/highmem.h>
      37                 :            : #include <linux/spinlock.h>
      38                 :            : #include <linux/key.h>
      39                 :            : #include <linux/personality.h>
      40                 :            : #include <linux/binfmts.h>
      41                 :            : #include <linux/utsname.h>
      42                 :            : #include <linux/pid_namespace.h>
      43                 :            : #include <linux/module.h>
      44                 :            : #include <linux/namei.h>
      45                 :            : #include <linux/mount.h>
      46                 :            : #include <linux/security.h>
      47                 :            : #include <linux/syscalls.h>
      48                 :            : #include <linux/tsacct_kern.h>
      49                 :            : #include <linux/cn_proc.h>
      50                 :            : #include <linux/audit.h>
      51                 :            : #include <linux/tracehook.h>
      52                 :            : #include <linux/kmod.h>
      53                 :            : #include <linux/fsnotify.h>
      54                 :            : #include <linux/fs_struct.h>
      55                 :            : #include <linux/pipe_fs_i.h>
      56                 :            : #include <linux/oom.h>
      57                 :            : #include <linux/compat.h>
      58                 :            : 
      59                 :            : #include <asm/uaccess.h>
      60                 :            : #include <asm/mmu_context.h>
      61                 :            : #include <asm/tlb.h>
      62                 :            : 
      63                 :            : #include <trace/events/task.h>
      64                 :            : #include "internal.h"
      65                 :            : #include "coredump.h"
      66                 :            : 
      67                 :            : #include <trace/events/sched.h>
      68                 :            : 
      69                 :            : int suid_dumpable = 0;
      70                 :            : 
      71                 :            : static LIST_HEAD(formats);
      72                 :            : static DEFINE_RWLOCK(binfmt_lock);
      73                 :            : 
      74                 :          0 : void __register_binfmt(struct linux_binfmt * fmt, int insert)
      75                 :            : {
      76         [ #  # ]:          0 :         BUG_ON(!fmt);
      77 [ #  # ][ #  # ]:          0 :         if (WARN_ON(!fmt->load_binary))
      78                 :          0 :                 return;
      79                 :          0 :         write_lock(&binfmt_lock);
      80         [ #  # ]:          0 :         insert ? list_add(&fmt->lh, &formats) :
      81                 :          0 :                  list_add_tail(&fmt->lh, &formats);
      82                 :            :         write_unlock(&binfmt_lock);
      83                 :            : }
      84                 :            : 
      85                 :            : EXPORT_SYMBOL(__register_binfmt);
      86                 :            : 
      87                 :          0 : void unregister_binfmt(struct linux_binfmt * fmt)
      88                 :            : {
      89                 :          0 :         write_lock(&binfmt_lock);
      90                 :            :         list_del(&fmt->lh);
      91                 :            :         write_unlock(&binfmt_lock);
      92                 :          0 : }
      93                 :            : 
      94                 :            : EXPORT_SYMBOL(unregister_binfmt);
      95                 :            : 
      96                 :            : static inline void put_binfmt(struct linux_binfmt * fmt)
      97                 :            : {
      98                 :     179274 :         module_put(fmt->module);
      99                 :            : }
     100                 :            : 
     101                 :            : /*
     102                 :            :  * Note that a shared library must be both readable and executable due to
     103                 :            :  * security reasons.
     104                 :            :  *
     105                 :            :  * Also note that we take the address to load from from the file itself.
     106                 :            :  */
     107                 :          0 : SYSCALL_DEFINE1(uselib, const char __user *, library)
     108                 :            : {
     109                 :          0 :         struct linux_binfmt *fmt;
     110                 :          0 :         struct file *file;
     111                 :          0 :         struct filename *tmp = getname(library);
     112                 :            :         int error = PTR_ERR(tmp);
     113                 :            :         static const struct open_flags uselib_flags = {
     114                 :            :                 .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC,
     115                 :            :                 .acc_mode = MAY_READ | MAY_EXEC | MAY_OPEN,
     116                 :            :                 .intent = LOOKUP_OPEN,
     117                 :            :                 .lookup_flags = LOOKUP_FOLLOW,
     118                 :            :         };
     119                 :            : 
     120         [ #  # ]:          0 :         if (IS_ERR(tmp))
     121                 :            :                 goto out;
     122                 :            : 
     123                 :          0 :         file = do_filp_open(AT_FDCWD, tmp, &uselib_flags);
     124                 :          0 :         putname(tmp);
     125                 :            :         error = PTR_ERR(file);
     126         [ #  # ]:          0 :         if (IS_ERR(file))
     127                 :            :                 goto out;
     128                 :            : 
     129                 :            :         error = -EINVAL;
     130         [ #  # ]:          0 :         if (!S_ISREG(file_inode(file)->i_mode))
     131                 :            :                 goto exit;
     132                 :            : 
     133                 :            :         error = -EACCES;
     134         [ #  # ]:          0 :         if (file->f_path.mnt->mnt_flags & MNT_NOEXEC)
     135                 :            :                 goto exit;
     136                 :            : 
     137                 :            :         fsnotify_open(file);
     138                 :            : 
     139                 :            :         error = -ENOEXEC;
     140                 :            : 
     141                 :          0 :         read_lock(&binfmt_lock);
     142         [ #  # ]:          0 :         list_for_each_entry(fmt, &formats, lh) {
     143         [ #  # ]:          0 :                 if (!fmt->load_shlib)
     144                 :          0 :                         continue;
     145         [ #  # ]:          0 :                 if (!try_module_get(fmt->module))
     146                 :          0 :                         continue;
     147                 :            :                 read_unlock(&binfmt_lock);
     148                 :          0 :                 error = fmt->load_shlib(file);
     149                 :          0 :                 read_lock(&binfmt_lock);
     150                 :            :                 put_binfmt(fmt);
     151         [ #  # ]:          0 :                 if (error != -ENOEXEC)
     152                 :            :                         break;
     153                 :            :         }
     154                 :            :         read_unlock(&binfmt_lock);
     155                 :            : exit:
     156                 :          0 :         fput(file);
     157                 :            : out:
     158                 :            :         return error;
     159                 :            : }
     160                 :            : 
     161                 :            : #ifdef CONFIG_MMU
     162                 :            : /*
     163                 :            :  * The nascent bprm->mm is not visible until exec_mmap() but it can
     164                 :            :  * use a lot of memory, account these pages in current->mm temporary
     165                 :            :  * for oom_badness()->get_mm_rss(). Once exec succeeds or fails, we
     166                 :            :  * change the counter back via acct_arg_size(0).
     167                 :            :  */
     168                 :    2156901 : static void acct_arg_size(struct linux_binprm *bprm, unsigned long pages)
     169                 :            : {
     170                 :    2156901 :         struct mm_struct *mm = current->mm;
     171                 :    2156901 :         long diff = (long)(pages - bprm->vma_pages);
     172                 :            : 
     173         [ +  + ]:    2156901 :         if (!mm || !diff)
     174                 :          0 :                 return;
     175                 :            : 
     176                 :    2036636 :         bprm->vma_pages = pages;
     177                 :            :         add_mm_counter(mm, MM_ANONPAGES, diff);
     178                 :            : }
     179                 :            : 
     180                 :          0 : static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
     181                 :            :                 int write)
     182                 :            : {
     183                 :            :         struct page *page;
     184                 :            :         int ret;
     185                 :            : 
     186                 :            : #ifdef CONFIG_STACK_GROWSUP
     187                 :            :         if (write) {
     188                 :            :                 ret = expand_downwards(bprm->vma, pos);
     189                 :            :                 if (ret < 0)
     190                 :            :                         return NULL;
     191                 :            :         }
     192                 :            : #endif
     193                 :    2099101 :         ret = get_user_pages(current, bprm->mm, pos,
     194                 :            :                         1, write, 1, &page, NULL);
     195         [ +  + ]:    2099109 :         if (ret <= 0)
     196                 :            :                 return NULL;
     197                 :            : 
     198         [ +  + ]:    2099107 :         if (write) {
     199                 :    2097918 :                 unsigned long size = bprm->vma->vm_end - bprm->vma->vm_start;
     200                 :            :                 struct rlimit *rlim;
     201                 :            : 
     202                 :    2097918 :                 acct_arg_size(bprm, size / PAGE_SIZE);
     203                 :            : 
     204                 :            :                 /*
     205                 :            :                  * We've historically supported up to 32 pages (ARG_MAX)
     206                 :            :                  * of argument strings even with small stacks
     207                 :            :                  */
     208         [ +  + ]:    2097870 :                 if (size <= ARG_MAX)
     209                 :     186742 :                         return page;
     210                 :            : 
     211                 :            :                 /*
     212                 :            :                  * Limit to 1/4-th the stack size for the argv+env strings.
     213                 :            :                  * This ensures that:
     214                 :            :                  *  - the remaining binfmt code will not run out of stack space,
     215                 :            :                  *  - the program will have a reasonable amount of stack left
     216                 :            :                  *    to work from.
     217                 :            :                  */
     218                 :    1911128 :                 rlim = current->signal->rlim;
     219         [ -  + ]:    1911128 :                 if (size > ACCESS_ONCE(rlim[RLIMIT_STACK].rlim_cur) / 4) {
     220                 :          0 :                         put_page(page);
     221                 :          0 :                         return NULL;
     222                 :            :                 }
     223                 :            :         }
     224                 :            : 
     225                 :    1912317 :         return page;
     226                 :            : }
     227                 :            : 
     228                 :            : static void put_arg_page(struct page *page)
     229                 :            : {
     230                 :    2099096 :         put_page(page);
     231                 :            : }
     232                 :            : 
     233                 :            : static void free_arg_page(struct linux_binprm *bprm, int i)
     234                 :            : {
     235                 :            : }
     236                 :            : 
     237                 :            : static void free_arg_pages(struct linux_binprm *bprm)
     238                 :            : {
     239                 :            : }
     240                 :            : 
     241                 :    2097919 : static void flush_arg_page(struct linux_binprm *bprm, unsigned long pos,
     242                 :            :                 struct page *page)
     243                 :            : {
     244                 :    2097919 :         flush_cache_page(bprm->vma, pos, page_to_pfn(page));
     245                 :    2097901 : }
     246                 :            : 
     247                 :          0 : static int __bprm_mm_init(struct linux_binprm *bprm)
     248                 :            : {
     249                 :            :         int err;
     250                 :            :         struct vm_area_struct *vma = NULL;
     251                 :      58982 :         struct mm_struct *mm = bprm->mm;
     252                 :            : 
     253                 :     117965 :         bprm->vma = vma = kmem_cache_zalloc(vm_area_cachep, GFP_KERNEL);
     254         [ +  - ]:      58983 :         if (!vma)
     255                 :            :                 return -ENOMEM;
     256                 :            : 
     257                 :      58983 :         down_write(&mm->mmap_sem);
     258                 :      58984 :         vma->vm_mm = mm;
     259                 :            : 
     260                 :            :         /*
     261                 :            :          * Place the stack at the largest stack address the architecture
     262                 :            :          * supports. Later, we'll move this to an appropriate place. We don't
     263                 :            :          * use STACK_TOP because that can depend on attributes which aren't
     264                 :            :          * configured yet.
     265                 :            :          */
     266                 :            :         BUILD_BUG_ON(VM_STACK_FLAGS & VM_STACK_INCOMPLETE_SETUP);
     267                 :      58984 :         vma->vm_end = STACK_TOP_MAX;
     268                 :      58984 :         vma->vm_start = vma->vm_end - PAGE_SIZE;
     269         [ +  + ]:      58984 :         vma->vm_flags = VM_SOFTDIRTY | VM_STACK_FLAGS | VM_STACK_INCOMPLETE_SETUP;
     270                 :      58984 :         vma->vm_page_prot = vm_get_page_prot(vma->vm_flags);
     271                 :      58974 :         INIT_LIST_HEAD(&vma->anon_vma_chain);
     272                 :            : 
     273                 :      58974 :         err = insert_vm_struct(mm, vma);
     274         [ +  - ]:      58935 :         if (err)
     275                 :            :                 goto err;
     276                 :            : 
     277                 :      58935 :         mm->stack_vm = mm->total_vm = 1;
     278                 :      58935 :         up_write(&mm->mmap_sem);
     279                 :      58935 :         bprm->p = vma->vm_end - sizeof(void *);
     280                 :      58935 :         return 0;
     281                 :            : err:
     282                 :          0 :         up_write(&mm->mmap_sem);
     283                 :          0 :         bprm->vma = NULL;
     284                 :          0 :         kmem_cache_free(vm_area_cachep, vma);
     285                 :          0 :         return err;
     286                 :            : }
     287                 :            : 
     288                 :            : static bool valid_arg_len(struct linux_binprm *bprm, long len)
     289                 :            : {
     290                 :    2271256 :         return len <= MAX_ARG_STRLEN;
     291                 :            : }
     292                 :            : 
     293                 :            : #else
     294                 :            : 
     295                 :            : static inline void acct_arg_size(struct linux_binprm *bprm, unsigned long pages)
     296                 :            : {
     297                 :            : }
     298                 :            : 
     299                 :            : static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
     300                 :            :                 int write)
     301                 :            : {
     302                 :            :         struct page *page;
     303                 :            : 
     304                 :            :         page = bprm->page[pos / PAGE_SIZE];
     305                 :            :         if (!page && write) {
     306                 :            :                 page = alloc_page(GFP_HIGHUSER|__GFP_ZERO);
     307                 :            :                 if (!page)
     308                 :            :                         return NULL;
     309                 :            :                 bprm->page[pos / PAGE_SIZE] = page;
     310                 :            :         }
     311                 :            : 
     312                 :            :         return page;
     313                 :            : }
     314                 :            : 
     315                 :            : static void put_arg_page(struct page *page)
     316                 :            : {
     317                 :            : }
     318                 :            : 
     319                 :            : static void free_arg_page(struct linux_binprm *bprm, int i)
     320                 :            : {
     321                 :            :         if (bprm->page[i]) {
     322                 :            :                 __free_page(bprm->page[i]);
     323                 :            :                 bprm->page[i] = NULL;
     324                 :            :         }
     325                 :            : }
     326                 :            : 
     327                 :            : static void free_arg_pages(struct linux_binprm *bprm)
     328                 :            : {
     329                 :            :         int i;
     330                 :            : 
     331                 :            :         for (i = 0; i < MAX_ARG_PAGES; i++)
     332                 :            :                 free_arg_page(bprm, i);
     333                 :            : }
     334                 :            : 
     335                 :            : static void flush_arg_page(struct linux_binprm *bprm, unsigned long pos,
     336                 :            :                 struct page *page)
     337                 :            : {
     338                 :            : }
     339                 :            : 
     340                 :            : static int __bprm_mm_init(struct linux_binprm *bprm)
     341                 :            : {
     342                 :            :         bprm->p = PAGE_SIZE * MAX_ARG_PAGES - sizeof(void *);
     343                 :            :         return 0;
     344                 :            : }
     345                 :            : 
     346                 :            : static bool valid_arg_len(struct linux_binprm *bprm, long len)
     347                 :            : {
     348                 :            :         return len <= bprm->p;
     349                 :            : }
     350                 :            : 
     351                 :            : #endif /* CONFIG_MMU */
     352                 :            : 
     353                 :            : /*
     354                 :            :  * Create a new mm_struct and populate it with a temporary stack
     355                 :            :  * vm_area_struct.  We don't have enough context at this point to set the stack
     356                 :            :  * flags, permissions, and offset, so we use temporary values.  We'll update
     357                 :            :  * them later in setup_arg_pages().
     358                 :            :  */
     359                 :          0 : static int bprm_mm_init(struct linux_binprm *bprm)
     360                 :            : {
     361                 :            :         int err;
     362                 :            :         struct mm_struct *mm = NULL;
     363                 :            : 
     364                 :      58974 :         bprm->mm = mm = mm_alloc();
     365                 :            :         err = -ENOMEM;
     366         [ +  - ]:      58983 :         if (!mm)
     367                 :            :                 goto err;
     368                 :            : 
     369                 :      58983 :         err = init_new_context(current, mm);
     370                 :            :         if (err)
     371                 :            :                 goto err;
     372                 :            : 
     373                 :      58973 :         err = __bprm_mm_init(bprm);
     374            [ + ]:      58947 :         if (err)
     375                 :            :                 goto err;
     376                 :            : 
     377                 :            :         return 0;
     378                 :            : 
     379                 :            : err:
     380         [ #  # ]:      58974 :         if (mm) {
     381                 :          0 :                 bprm->mm = NULL;
     382                 :            :                 mmdrop(mm);
     383                 :            :         }
     384                 :            : 
     385                 :          0 :         return err;
     386                 :            : }
     387                 :            : 
     388                 :            : struct user_arg_ptr {
     389                 :            : #ifdef CONFIG_COMPAT
     390                 :            :         bool is_compat;
     391                 :            : #endif
     392                 :            :         union {
     393                 :            :                 const char __user *const __user *native;
     394                 :            : #ifdef CONFIG_COMPAT
     395                 :            :                 const compat_uptr_t __user *compat;
     396                 :            : #endif
     397                 :            :         } ptr;
     398                 :            : };
     399                 :            : 
     400                 :          0 : static const char __user *get_user_arg_ptr(struct user_arg_ptr argv, int nr)
     401                 :            : {
     402                 :            :         const char __user *native;
     403                 :            : 
     404                 :            : #ifdef CONFIG_COMPAT
     405                 :            :         if (unlikely(argv.is_compat)) {
     406                 :            :                 compat_uptr_t compat;
     407                 :            : 
     408                 :            :                 if (get_user(compat, argv.ptr.compat + nr))
     409                 :            :                         return ERR_PTR(-EFAULT);
     410                 :            : 
     411                 :            :                 return compat_ptr(compat);
     412                 :            :         }
     413                 :            : #endif
     414                 :            : 
     415            [ + ]:    4596671 :         if (get_user(native, argv.ptr.native + nr))
     416                 :            :                 return ERR_PTR(-EFAULT);
     417                 :            : 
     418                 :    4596585 :         return native;
     419                 :            : }
     420                 :            : 
     421                 :            : /*
     422                 :            :  * count() counts the number of strings in array ARGV.
     423                 :            :  */
     424                 :          0 : static int count(struct user_arg_ptr argv, int max)
     425                 :            : {
     426                 :            :         int i = 0;
     427                 :            : 
     428         [ +  + ]:     118196 :         if (argv.ptr.native != NULL) {
     429                 :            :                 for (;;) {
     430                 :    2325854 :                         const char __user *p = get_user_arg_ptr(argv, i);
     431                 :            : 
     432         [ +  + ]:    2325325 :                         if (!p)
     433                 :            :                                 break;
     434                 :            : 
     435            [ + ]:    2207627 :                         if (IS_ERR(p))
     436                 :            :                                 return -EFAULT;
     437                 :            : 
     438            [ + ]:    2207728 :                         if (i >= max)
     439                 :            :                                 return -E2BIG;
     440                 :    2207770 :                         ++i;
     441                 :            : 
     442         [ +  + ]:    2207770 :                         if (fatal_signal_pending(current))
     443                 :            :                                 return -ERESTARTNOHAND;
     444                 :    2207616 :                         cond_resched();
     445                 :    2207914 :                 }
     446                 :            :         }
     447                 :     117954 :         return i;
     448                 :            : }
     449                 :            : 
     450                 :            : /*
     451                 :            :  * 'copy_strings()' copies argument/environment strings from the old
     452                 :            :  * processes's memory to the new process's stack.  The call to get_user_pages()
     453                 :            :  * ensures the destination page is created and not swapped out.
     454                 :            :  */
     455                 :          0 : static int copy_strings(int argc, struct user_arg_ptr argv,
     456                 :    2097887 :                         struct linux_binprm *bprm)
     457                 :            : {
     458                 :            :         struct page *kmapped_page = NULL;
     459                 :            :         char *kaddr = NULL;
     460                 :            :         unsigned long kpos = 0;
     461                 :            :         int ret;
     462                 :            : 
     463         [ +  + ]:    2450739 :         while (argc-- > 0) {
     464                 :            :                 const char __user *str;
     465                 :            :                 int len;
     466                 :            :                 unsigned long pos;
     467                 :            : 
     468                 :            :                 ret = -EFAULT;
     469                 :    2271382 :                 str = get_user_arg_ptr(argv, argc);
     470            [ + ]:    2271448 :                 if (IS_ERR(str))
     471                 :            :                         goto out;
     472                 :            : 
     473                 :    2271455 :                 len = strnlen_user(str, MAX_ARG_STRLEN);
     474            [ + ]:    2271248 :                 if (!len)
     475                 :            :                         goto out;
     476                 :            : 
     477                 :            :                 ret = -E2BIG;
     478            [ + ]:    2271256 :                 if (!valid_arg_len(bprm, len))
     479                 :            :                         goto out;
     480                 :            : 
     481                 :            :                 /* We're going to work our way backwords. */
     482                 :    2271325 :                 pos = bprm->p;
     483                 :    2271325 :                 str += len;
     484                 :    2271325 :                 bprm->p -= len;
     485                 :            : 
     486         [ +  + ]:    6461144 :                 while (len > 0) {
     487                 :            :                         int offset, bytes_to_copy;
     488                 :            : 
     489            [ + ]:    4189766 :                         if (fatal_signal_pending(current)) {
     490                 :            :                                 ret = -ERESTARTNOHAND;
     491                 :            :                                 goto out;
     492                 :            :                         }
     493                 :    4190297 :                         cond_resched();
     494                 :            : 
     495                 :    4189862 :                         offset = pos % PAGE_SIZE;
     496         [ +  + ]:    4189862 :                         if (offset == 0)
     497                 :            :                                 offset = PAGE_SIZE;
     498                 :            : 
     499                 :            :                         bytes_to_copy = offset;
     500         [ +  + ]:    4189862 :                         if (bytes_to_copy > len)
     501                 :            :                                 bytes_to_copy = len;
     502                 :            : 
     503                 :    4189862 :                         offset -= bytes_to_copy;
     504                 :    4189862 :                         pos -= bytes_to_copy;
     505                 :    4189862 :                         str -= bytes_to_copy;
     506                 :    4189862 :                         len -= bytes_to_copy;
     507                 :            : 
     508 [ +  + ][ +  + ]:    4189862 :                         if (!kmapped_page || kpos != (pos & PAGE_MASK)) {
     509                 :            :                                 struct page *page;
     510                 :            : 
     511                 :    2097545 :                                 page = get_arg_page(bprm, pos, 1);
     512            [ + ]:    2097892 :                                 if (!page) {
     513                 :            :                                         ret = -E2BIG;
     514                 :            :                                         goto out;
     515                 :            :                                 }
     516                 :            : 
     517         [ +  + ]:    2097893 :                                 if (kmapped_page) {
     518                 :    1918728 :                                         flush_kernel_dcache_page(kmapped_page);
     519                 :    1918728 :                                         kunmap(kmapped_page);
     520                 :            :                                         put_arg_page(kmapped_page);
     521                 :            :                                 }
     522                 :            :                                 kmapped_page = page;
     523                 :    2097893 :                                 kaddr = kmap(kmapped_page);
     524                 :    2097887 :                                 kpos = pos & PAGE_MASK;
     525                 :    2097887 :                                 flush_arg_page(bprm, kpos, kmapped_page);
     526                 :            :                         }
     527         [ +  + ]:    4190431 :                         if (copy_from_user(kaddr+offset, str, bytes_to_copy)) {
     528                 :            :                                 ret = -EFAULT;
     529                 :            :                                 goto out;
     530                 :            :                         }
     531                 :            :                 }
     532                 :            :         }
     533                 :            :         ret = 0;
     534                 :            : out:
     535         [ +  + ]:     179353 :         if (kmapped_page) {
     536                 :     179183 :                 flush_kernel_dcache_page(kmapped_page);
     537                 :     179179 :                 kunmap(kmapped_page);
     538                 :            :                 put_arg_page(kmapped_page);
     539                 :            :         }
     540                 :     179357 :         return ret;
     541                 :            : }
     542                 :            : 
     543                 :            : /*
     544                 :            :  * Like copy_strings, but get argv and its values from kernel memory.
     545                 :            :  */
     546                 :          0 : int copy_strings_kernel(int argc, const char *const *__argv,
     547                 :            :                         struct linux_binprm *bprm)
     548                 :            : {
     549                 :            :         int r;
     550                 :      61386 :         mm_segment_t oldfs = get_fs();
     551                 :      61386 :         struct user_arg_ptr argv = {
     552                 :            :                 .ptr.native = (const char __user *const  __user *)__argv,
     553                 :            :         };
     554                 :            : 
     555                 :            :         set_fs(KERNEL_DS);
     556                 :      61386 :         r = copy_strings(argc, argv, bprm);
     557                 :            :         set_fs(oldfs);
     558                 :            : 
     559                 :      61387 :         return r;
     560                 :            : }
     561                 :            : EXPORT_SYMBOL(copy_strings_kernel);
     562                 :            : 
     563                 :            : #ifdef CONFIG_MMU
     564                 :            : 
     565                 :            : /*
     566                 :            :  * During bprm_mm_init(), we create a temporary stack at STACK_TOP_MAX.  Once
     567                 :            :  * the binfmt code determines where the new stack should reside, we shift it to
     568                 :            :  * its final location.  The process proceeds as follows:
     569                 :            :  *
     570                 :            :  * 1) Use shift to calculate the new vma endpoints.
     571                 :            :  * 2) Extend vma to cover both the old and new ranges.  This ensures the
     572                 :            :  *    arguments passed to subsequent functions are consistent.
     573                 :            :  * 3) Move vma's page tables to the new range.
     574                 :            :  * 4) Free up any cleared pgd range.
     575                 :            :  * 5) Shrink the vma to cover only the new range.
     576                 :            :  */
     577                 :          0 : static int shift_arg_pages(struct vm_area_struct *vma, unsigned long shift)
     578                 :            : {
     579                 :      58948 :         struct mm_struct *mm = vma->vm_mm;
     580                 :      58948 :         unsigned long old_start = vma->vm_start;
     581                 :      58948 :         unsigned long old_end = vma->vm_end;
     582                 :      58948 :         unsigned long length = old_end - old_start;
     583                 :      58948 :         unsigned long new_start = old_start - shift;
     584                 :      58948 :         unsigned long new_end = old_end - shift;
     585                 :            :         struct mmu_gather tlb;
     586                 :            : 
     587         [ -  + ]:      58948 :         BUG_ON(new_start > new_end);
     588                 :            : 
     589                 :            :         /*
     590                 :            :          * ensure there are no vmas between where we want to go
     591                 :            :          * and where we are
     592                 :            :          */
     593         [ +  - ]:      58948 :         if (vma != find_vma(mm, new_start))
     594                 :            :                 return -EFAULT;
     595                 :            : 
     596                 :            :         /*
     597                 :            :          * cover the whole range: [new_start, old_end)
     598                 :            :          */
     599         [ +  + ]:      58944 :         if (vma_adjust(vma, new_start, old_end, vma->vm_pgoff, NULL))
     600                 :            :                 return -ENOMEM;
     601                 :            : 
     602                 :            :         /*
     603                 :            :          * move the page tables downwards, on failure we rely on
     604                 :            :          * process cleanup to remove whatever mess we made.
     605                 :            :          */
     606         [ +  - ]:      58935 :         if (length != move_page_tables(vma, old_start,
     607                 :            :                                        vma, new_start, length, false))
     608                 :            :                 return -ENOMEM;
     609                 :            : 
     610                 :      58948 :         lru_add_drain();
     611                 :            :         tlb_gather_mmu(&tlb, mm, old_start, old_end);
     612         [ +  + ]:      58948 :         if (new_end > old_start) {
     613                 :            :                 /*
     614                 :            :                  * when the old and new regions overlap clear from new_end.
     615                 :            :                  */
     616         [ -  + ]:        264 :                 free_pgd_range(&tlb, new_end, old_end, new_end,
     617                 :        264 :                         vma->vm_next ? vma->vm_next->vm_start : USER_PGTABLES_CEILING);
     618                 :            :         } else {
     619                 :            :                 /*
     620                 :            :                  * otherwise, clean from old_start; this is done to not touch
     621                 :            :                  * the address space in [new_end, old_start) some architectures
     622                 :            :                  * have constraints on va-space that make this illegal (IA64) -
     623                 :            :                  * for the others its just a little faster.
     624                 :            :                  */
     625         [ -  + ]:      58684 :                 free_pgd_range(&tlb, old_start, old_end, new_end,
     626                 :      58684 :                         vma->vm_next ? vma->vm_next->vm_start : USER_PGTABLES_CEILING);
     627                 :            :         }
     628                 :            :         tlb_finish_mmu(&tlb, old_start, old_end);
     629                 :            : 
     630                 :            :         /*
     631                 :            :          * Shrink the vma to just the new range.  Always succeeds.
     632                 :            :          */
     633                 :      58948 :         vma_adjust(vma, new_start, new_end, vma->vm_pgoff, NULL);
     634                 :            : 
     635                 :      58948 :         return 0;
     636                 :            : }
     637                 :            : 
     638                 :            : /*
     639                 :            :  * Finalizes the stack vm_area_struct. The flags and permissions are updated,
     640                 :            :  * the stack is optionally relocated, and some extra space is added.
     641                 :            :  */
     642                 :          0 : int setup_arg_pages(struct linux_binprm *bprm,
     643                 :            :                     unsigned long stack_top,
     644                 :            :                     int executable_stack)
     645                 :            : {
     646                 :            :         unsigned long ret;
     647                 :            :         unsigned long stack_shift;
     648                 :      58972 :         struct mm_struct *mm = current->mm;
     649                 :      58972 :         struct vm_area_struct *vma = bprm->vma;
     650                 :      58972 :         struct vm_area_struct *prev = NULL;
     651                 :            :         unsigned long vm_flags;
     652                 :            :         unsigned long stack_base;
     653                 :            :         unsigned long stack_size;
     654                 :            :         unsigned long stack_expand;
     655                 :            :         unsigned long rlim_stack;
     656                 :            : 
     657                 :            : #ifdef CONFIG_STACK_GROWSUP
     658                 :            :         /* Limit stack size to 1GB */
     659                 :            :         stack_base = rlimit_max(RLIMIT_STACK);
     660                 :            :         if (stack_base > (1 << 30))
     661                 :            :                 stack_base = 1 << 30;
     662                 :            : 
     663                 :            :         /* Make sure we didn't let the argument array grow too large. */
     664                 :            :         if (vma->vm_end - vma->vm_start > stack_base)
     665                 :            :                 return -ENOMEM;
     666                 :            : 
     667                 :            :         stack_base = PAGE_ALIGN(stack_top - stack_base);
     668                 :            : 
     669                 :            :         stack_shift = vma->vm_start - stack_base;
     670                 :            :         mm->arg_start = bprm->p - stack_shift;
     671                 :            :         bprm->p = vma->vm_end - stack_shift;
     672                 :            : #else
     673                 :            :         stack_top = arch_align_stack(stack_top);
     674                 :      58972 :         stack_top = PAGE_ALIGN(stack_top);
     675                 :            : 
     676    [ + ][ +  + ]:      58972 :         if (unlikely(stack_top < mmap_min_addr) ||
     677                 :      58973 :             unlikely(vma->vm_end - vma->vm_start >= stack_top - mmap_min_addr))
     678                 :            :                 return -ENOMEM;
     679                 :            : 
     680                 :      58971 :         stack_shift = vma->vm_end - stack_top;
     681                 :            : 
     682                 :      58971 :         bprm->p -= stack_shift;
     683                 :      58971 :         mm->arg_start = bprm->p;
     684                 :            : #endif
     685                 :            : 
     686         [ -  + ]:      58971 :         if (bprm->loader)
     687                 :          0 :                 bprm->loader -= stack_shift;
     688                 :      58971 :         bprm->exec -= stack_shift;
     689                 :            : 
     690                 :      58971 :         down_write(&mm->mmap_sem);
     691         [ +  + ]:      58976 :         vm_flags = VM_STACK_FLAGS;
     692                 :            : 
     693                 :            :         /*
     694                 :            :          * Adjust stack execute permissions; explicitly enable for
     695                 :            :          * EXSTACK_ENABLE_X, disable for EXSTACK_DISABLE_X and leave alone
     696                 :            :          * (arch default) otherwise.
     697                 :            :          */
     698         [ +  + ]:      58976 :         if (unlikely(executable_stack == EXSTACK_ENABLE_X))
     699                 :            :                 vm_flags |= VM_EXEC;
     700         [ +  - ]:      58971 :         else if (executable_stack == EXSTACK_DISABLE_X)
     701                 :            :                 vm_flags &= ~VM_EXEC;
     702                 :      58976 :         vm_flags |= mm->def_flags;
     703                 :      58976 :         vm_flags |= VM_STACK_INCOMPLETE_SETUP;
     704                 :            : 
     705                 :      58976 :         ret = mprotect_fixup(vma, &prev, vma->vm_start, vma->vm_end,
     706                 :            :                         vm_flags);
     707         [ +  + ]:      58951 :         if (ret)
     708                 :            :                 goto out_unlock;
     709         [ -  + ]:      58950 :         BUG_ON(prev != vma);
     710                 :            : 
     711                 :            :         /* Move stack pages down in memory. */
     712         [ +  + ]:      58950 :         if (stack_shift) {
     713                 :      58948 :                 ret = shift_arg_pages(vma, stack_shift);
     714            [ + ]:      58948 :                 if (ret)
     715                 :            :                         goto out_unlock;
     716                 :            :         }
     717                 :            : 
     718                 :            :         /* mprotect_fixup is overkill to remove the temporary stack flags */
     719                 :      58976 :         vma->vm_flags &= ~VM_STACK_INCOMPLETE_SETUP;
     720                 :            : 
     721                 :            :         stack_expand = 131072UL; /* randomly 32*4k (or 2*64k) pages */
     722                 :      58976 :         stack_size = vma->vm_end - vma->vm_start;
     723                 :            :         /*
     724                 :            :          * Align this down to a page boundary as expand_stack
     725                 :            :          * will align it up.
     726                 :            :          */
     727                 :      58976 :         rlim_stack = rlimit(RLIMIT_STACK) & PAGE_MASK;
     728                 :            : #ifdef CONFIG_STACK_GROWSUP
     729                 :            :         if (stack_size + stack_expand > rlim_stack)
     730                 :            :                 stack_base = vma->vm_start + rlim_stack;
     731                 :            :         else
     732                 :            :                 stack_base = vma->vm_end + stack_expand;
     733                 :            : #else
     734         [ -  + ]:      58976 :         if (stack_size + stack_expand > rlim_stack)
     735                 :          0 :                 stack_base = vma->vm_end - rlim_stack;
     736                 :            :         else
     737                 :      58976 :                 stack_base = vma->vm_start - stack_expand;
     738                 :            : #endif
     739                 :      58976 :         current->mm->start_stack = bprm->p;
     740                 :      58976 :         ret = expand_stack(vma, stack_base);
     741         [ -  + ]:      58976 :         if (ret)
     742                 :            :                 ret = -EFAULT;
     743                 :            : 
     744                 :            : out_unlock:
     745                 :      58951 :         up_write(&mm->mmap_sem);
     746                 :      58976 :         return ret;
     747                 :            : }
     748                 :            : EXPORT_SYMBOL(setup_arg_pages);
     749                 :            : 
     750                 :            : #endif /* CONFIG_MMU */
     751                 :            : 
     752                 :          0 : struct file *open_exec(const char *name)
     753                 :            : {
     754                 :     119144 :         struct file *file;
     755                 :            :         int err;
     756                 :     158635 :         struct filename tmp = { .name = name };
     757                 :            :         static const struct open_flags open_exec_flags = {
     758                 :            :                 .open_flag = O_LARGEFILE | O_RDONLY | __FMODE_EXEC,
     759                 :            :                 .acc_mode = MAY_EXEC | MAY_OPEN,
     760                 :            :                 .intent = LOOKUP_OPEN,
     761                 :            :                 .lookup_flags = LOOKUP_FOLLOW,
     762                 :            :         };
     763                 :            : 
     764                 :     158635 :         file = do_filp_open(AT_FDCWD, &tmp, &open_exec_flags);
     765         [ +  + ]:     158633 :         if (IS_ERR(file))
     766                 :            :                 goto out;
     767                 :            : 
     768                 :            :         err = -EACCES;
     769         [ +  - ]:     119144 :         if (!S_ISREG(file_inode(file)->i_mode))
     770                 :            :                 goto exit;
     771                 :            : 
     772         [ +  + ]:     119144 :         if (file->f_path.mnt->mnt_flags & MNT_NOEXEC)
     773                 :            :                 goto exit;
     774                 :            : 
     775                 :            :         fsnotify_open(file);
     776                 :            : 
     777                 :            :         err = deny_write_access(file);
     778            [ + ]:     119126 :         if (err)
     779                 :            :                 goto exit;
     780                 :            : 
     781                 :            : out:
     782                 :     158636 :         return file;
     783                 :            : 
     784                 :            : exit:
     785                 :          0 :         fput(file);
     786                 :          1 :         return ERR_PTR(err);
     787                 :            : }
     788                 :            : EXPORT_SYMBOL(open_exec);
     789                 :            : 
     790                 :          0 : int kernel_read(struct file *file, loff_t offset,
     791                 :            :                 char *addr, unsigned long count)
     792                 :            : {
     793                 :            :         mm_segment_t old_fs;
     794                 :     296039 :         loff_t pos = offset;
     795                 :            :         int result;
     796                 :            : 
     797                 :     296039 :         old_fs = get_fs();
     798                 :            :         set_fs(get_ds());
     799                 :            :         /* The cast to a user pointer is valid due to the set_fs() */
     800                 :     296039 :         result = vfs_read(file, (void __user *)addr, count, &pos);
     801                 :            :         set_fs(old_fs);
     802                 :     296058 :         return result;
     803                 :            : }
     804                 :            : 
     805                 :            : EXPORT_SYMBOL(kernel_read);
     806                 :            : 
     807                 :          0 : ssize_t read_code(struct file *file, unsigned long addr, loff_t pos, size_t len)
     808                 :            : {
     809                 :          0 :         ssize_t res = file->f_op->read(file, (void __user *)addr, len, &pos);
     810         [ #  # ]:          0 :         if (res > 0)
     811                 :          0 :                 flush_icache_range(addr, addr + len);
     812                 :          0 :         return res;
     813                 :            : }
     814                 :            : EXPORT_SYMBOL(read_code);
     815                 :            : 
     816                 :          0 : static int exec_mmap(struct mm_struct *mm)
     817                 :            : {
     818                 :            :         struct task_struct *tsk;
     819                 :            :         struct mm_struct * old_mm, *active_mm;
     820                 :            : 
     821                 :            :         /* Notify parent that we're no longer interested in the old VM */
     822                 :      58959 :         tsk = current;
     823                 :      58959 :         old_mm = current->mm;
     824                 :      58959 :         mm_release(tsk, old_mm);
     825                 :            : 
     826            [ + ]:      58875 :         if (old_mm) {
     827                 :      58945 :                 sync_mm_rss(old_mm);
     828                 :            :                 /*
     829                 :            :                  * Make sure that if there is a core dump in progress
     830                 :            :                  * for the old mm, we get out and die instead of going
     831                 :            :                  * through with the exec.  We must hold mmap_sem around
     832                 :            :                  * checking core_state and changing tsk->mm.
     833                 :            :                  */
     834                 :      58877 :                 down_read(&old_mm->mmap_sem);
     835         [ -  + ]:      58917 :                 if (unlikely(old_mm->core_state)) {
     836                 :          0 :                         up_read(&old_mm->mmap_sem);
     837                 :          0 :                         return -EINTR;
     838                 :            :                 }
     839                 :            :         }
     840                 :            :         task_lock(tsk);
     841                 :      58958 :         active_mm = tsk->active_mm;
     842                 :      58958 :         tsk->mm = mm;
     843                 :      58958 :         tsk->active_mm = mm;
     844                 :            :         activate_mm(active_mm, mm);
     845                 :            :         task_unlock(tsk);
     846                 :      58976 :         arch_pick_mmap_layout(mm);
     847         [ +  + ]:      58897 :         if (old_mm) {
     848                 :      58873 :                 up_read(&old_mm->mmap_sem);
     849         [ -  + ]:      58948 :                 BUG_ON(active_mm != old_mm);
     850                 :      58948 :                 setmax_mm_hiwater_rss(&tsk->signal->maxrss, old_mm);
     851                 :            :                 mm_update_next_owner(old_mm);
     852                 :      58948 :                 mmput(old_mm);
     853                 :      58952 :                 return 0;
     854                 :            :         }
     855                 :            :         mmdrop(active_mm);
     856                 :            :         return 0;
     857                 :            : }
     858                 :            : 
     859                 :            : /*
     860                 :            :  * This function makes sure the current process has its own signal table,
     861                 :            :  * so that flush_signal_handlers can later reset the handlers without
     862                 :            :  * disturbing other processes.  (Other processes might share the signal
     863                 :            :  * table via the CLONE_SIGHAND option to clone().)
     864                 :            :  */
     865                 :          0 : static int de_thread(struct task_struct *tsk)
     866                 :            : {
     867                 :      58975 :         struct signal_struct *sig = tsk->signal;
     868                 :      58975 :         struct sighand_struct *oldsighand = tsk->sighand;
     869                 :            :         spinlock_t *lock = &oldsighand->siglock;
     870                 :            : 
     871         [ -  + ]:      58975 :         if (thread_group_empty(tsk))
     872                 :            :                 goto no_thread_group;
     873                 :            : 
     874                 :            :         /*
     875                 :            :          * Kill all other threads in the thread group.
     876                 :            :          */
     877                 :            :         spin_lock_irq(lock);
     878         [ #  # ]:          0 :         if (signal_group_exit(sig)) {
     879                 :            :                 /*
     880                 :            :                  * Another group action in progress, just
     881                 :            :                  * return so that the signal is processed.
     882                 :            :                  */
     883                 :            :                 spin_unlock_irq(lock);
     884                 :          0 :                 return -EAGAIN;
     885                 :            :         }
     886                 :            : 
     887                 :          0 :         sig->group_exit_task = tsk;
     888                 :          0 :         sig->notify_count = zap_other_threads(tsk);
     889         [ #  # ]:          0 :         if (!thread_group_leader(tsk))
     890                 :          0 :                 sig->notify_count--;
     891                 :            : 
     892         [ #  # ]:          0 :         while (sig->notify_count) {
     893                 :          0 :                 __set_current_state(TASK_KILLABLE);
     894                 :            :                 spin_unlock_irq(lock);
     895                 :          0 :                 schedule();
     896         [ #  # ]:          0 :                 if (unlikely(__fatal_signal_pending(tsk)))
     897                 :            :                         goto killed;
     898                 :            :                 spin_lock_irq(lock);
     899                 :            :         }
     900                 :            :         spin_unlock_irq(lock);
     901                 :            : 
     902                 :            :         /*
     903                 :            :          * At this point all other threads have exited, all we have to
     904                 :            :          * do is to wait for the thread group leader to become inactive,
     905                 :            :          * and to assume its PID:
     906                 :            :          */
     907         [ #  # ]:          0 :         if (!thread_group_leader(tsk)) {
     908                 :          0 :                 struct task_struct *leader = tsk->group_leader;
     909                 :            : 
     910                 :          0 :                 sig->notify_count = -1;      /* for exit_notify() */
     911                 :            :                 for (;;) {
     912                 :            :                         threadgroup_change_begin(tsk);
     913                 :          0 :                         write_lock_irq(&tasklist_lock);
     914         [ #  # ]:      58975 :                         if (likely(leader->exit_state))
     915                 :            :                                 break;
     916                 :          0 :                         __set_current_state(TASK_KILLABLE);
     917                 :            :                         write_unlock_irq(&tasklist_lock);
     918                 :            :                         threadgroup_change_end(tsk);
     919                 :          0 :                         schedule();
     920         [ #  # ]:          0 :                         if (unlikely(__fatal_signal_pending(tsk)))
     921                 :            :                                 goto killed;
     922                 :            :                 }
     923                 :            : 
     924                 :            :                 /*
     925                 :            :                  * The only record we have of the real-time age of a
     926                 :            :                  * process, regardless of execs it's done, is start_time.
     927                 :            :                  * All the past CPU time is accumulated in signal_struct
     928                 :            :                  * from sister threads now dead.  But in this non-leader
     929                 :            :                  * exec, nothing survives from the original leader thread,
     930                 :            :                  * whose birth marks the true age of this process now.
     931                 :            :                  * When we take on its identity by switching to its PID, we
     932                 :            :                  * also take its birthdate (always earlier than our own).
     933                 :            :                  */
     934                 :          0 :                 tsk->start_time = leader->start_time;
     935                 :          0 :                 tsk->real_start_time = leader->real_start_time;
     936                 :            : 
     937         [ #  # ]:          0 :                 BUG_ON(!same_thread_group(leader, tsk));
     938         [ #  # ]:          0 :                 BUG_ON(has_group_leader_pid(tsk));
     939                 :            :                 /*
     940                 :            :                  * An exec() starts a new thread group with the
     941                 :            :                  * TGID of the previous thread group. Rehash the
     942                 :            :                  * two threads with a switched PID, and release
     943                 :            :                  * the former thread group leader:
     944                 :            :                  */
     945                 :            : 
     946                 :            :                 /* Become a process group leader with the old leader's pid.
     947                 :            :                  * The old leader becomes a thread of the this thread group.
     948                 :            :                  * Note: The old leader also uses this pid until release_task
     949                 :            :                  *       is called.  Odd but simple and correct.
     950                 :            :                  */
     951                 :          0 :                 tsk->pid = leader->pid;
     952                 :          0 :                 change_pid(tsk, PIDTYPE_PID, task_pid(leader));
     953                 :          0 :                 transfer_pid(leader, tsk, PIDTYPE_PGID);
     954                 :          0 :                 transfer_pid(leader, tsk, PIDTYPE_SID);
     955                 :            : 
     956                 :          0 :                 list_replace_rcu(&leader->tasks, &tsk->tasks);
     957                 :          0 :                 list_replace_init(&leader->sibling, &tsk->sibling);
     958                 :            : 
     959                 :          0 :                 tsk->group_leader = tsk;
     960                 :          0 :                 leader->group_leader = tsk;
     961                 :            : 
     962                 :          0 :                 tsk->exit_signal = SIGCHLD;
     963                 :          0 :                 leader->exit_signal = -1;
     964                 :            : 
     965         [ #  # ]:          0 :                 BUG_ON(leader->exit_state != EXIT_ZOMBIE);
     966                 :          0 :                 leader->exit_state = EXIT_DEAD;
     967                 :            : 
     968                 :            :                 /*
     969                 :            :                  * We are going to release_task()->ptrace_unlink() silently,
     970                 :            :                  * the tracer can sleep in do_wait(). EXIT_DEAD guarantees
     971                 :            :                  * the tracer wont't block again waiting for this thread.
     972                 :            :                  */
     973         [ #  # ]:          0 :                 if (unlikely(leader->ptrace))
     974                 :          0 :                         __wake_up_parent(leader, leader->parent);
     975                 :            :                 write_unlock_irq(&tasklist_lock);
     976                 :            :                 threadgroup_change_end(tsk);
     977                 :            : 
     978                 :          0 :                 release_task(leader);
     979                 :            :         }
     980                 :            : 
     981                 :          0 :         sig->group_exit_task = NULL;
     982                 :          0 :         sig->notify_count = 0;
     983                 :            : 
     984                 :            : no_thread_group:
     985                 :            :         /* we have changed execution domain */
     986                 :      58975 :         tsk->exit_signal = SIGCHLD;
     987                 :            : 
     988                 :      58975 :         exit_itimers(sig);
     989                 :      58976 :         flush_itimer_signals();
     990                 :            : 
     991         [ -  + ]:      58941 :         if (atomic_read(&oldsighand->count) != 1) {
     992                 :            :                 struct sighand_struct *newsighand;
     993                 :            :                 /*
     994                 :            :                  * This ->sighand is shared with the CLONE_SIGHAND
     995                 :            :                  * but not CLONE_THREAD task, switch to the new one.
     996                 :            :                  */
     997                 :          0 :                 newsighand = kmem_cache_alloc(sighand_cachep, GFP_KERNEL);
     998         [ #  # ]:          0 :                 if (!newsighand)
     999                 :            :                         return -ENOMEM;
    1000                 :            : 
    1001                 :          0 :                 atomic_set(&newsighand->count, 1);
    1002                 :          0 :                 memcpy(newsighand->action, oldsighand->action,
    1003                 :            :                        sizeof(newsighand->action));
    1004                 :            : 
    1005                 :          0 :                 write_lock_irq(&tasklist_lock);
    1006                 :            :                 spin_lock(&oldsighand->siglock);
    1007                 :          0 :                 rcu_assign_pointer(tsk->sighand, newsighand);
    1008                 :            :                 spin_unlock(&oldsighand->siglock);
    1009                 :            :                 write_unlock_irq(&tasklist_lock);
    1010                 :            : 
    1011                 :          0 :                 __cleanup_sighand(oldsighand);
    1012                 :            :         }
    1013                 :            : 
    1014         [ -  + ]:      58974 :         BUG_ON(!thread_group_leader(tsk));
    1015                 :            :         return 0;
    1016                 :            : 
    1017                 :            : killed:
    1018                 :            :         /* protects against exit_notify() and __exit_signal() */
    1019                 :          0 :         read_lock(&tasklist_lock);
    1020                 :          0 :         sig->group_exit_task = NULL;
    1021                 :          0 :         sig->notify_count = 0;
    1022                 :            :         read_unlock(&tasklist_lock);
    1023                 :          0 :         return -EAGAIN;
    1024                 :            : }
    1025                 :            : 
    1026                 :          0 : char *get_task_comm(char *buf, struct task_struct *tsk)
    1027                 :            : {
    1028                 :            :         /* buf must be at least sizeof(tsk->comm) in size */
    1029                 :            :         task_lock(tsk);
    1030                 :      26800 :         strncpy(buf, tsk->comm, sizeof(tsk->comm));
    1031                 :            :         task_unlock(tsk);
    1032                 :      26800 :         return buf;
    1033                 :            : }
    1034                 :            : EXPORT_SYMBOL_GPL(get_task_comm);
    1035                 :            : 
    1036                 :            : /*
    1037                 :            :  * These functions flushes out all traces of the currently running executable
    1038                 :            :  * so that a new one can be started
    1039                 :            :  */
    1040                 :            : 
    1041                 :          0 : void set_task_comm(struct task_struct *tsk, char *buf)
    1042                 :            : {
    1043                 :            :         task_lock(tsk);
    1044                 :            :         trace_task_rename(tsk, buf);
    1045                 :      58997 :         strlcpy(tsk->comm, buf, sizeof(tsk->comm));
    1046                 :            :         task_unlock(tsk);
    1047                 :      59007 :         perf_event_comm(tsk);
    1048                 :      58996 : }
    1049                 :            : 
    1050                 :            : static void filename_to_taskname(char *tcomm, const char *fn, unsigned int len)
    1051                 :            : {
    1052                 :            :         int i, ch;
    1053                 :            : 
    1054                 :            :         /* Copies the binary name from after last slash */
    1055         [ +  + ]:     871638 :         for (i = 0; (ch = *(fn++)) != '\0';) {
    1056         [ +  + ]:     812672 :                 if (ch == '/')
    1057                 :            :                         i = 0; /* overwrite what we wrote */
    1058                 :            :                 else
    1059         [ +  + ]:     652283 :                         if (i < len - 1)
    1060                 :     812672 :                                 tcomm[i++] = ch;
    1061                 :            :         }
    1062                 :      58966 :         tcomm[i] = '\0';
    1063                 :            : }
    1064                 :            : 
    1065                 :          0 : int flush_old_exec(struct linux_binprm * bprm)
    1066                 :            : {
    1067                 :            :         int retval;
    1068                 :            : 
    1069                 :            :         /*
    1070                 :            :          * Make sure we have a private signal table and that
    1071                 :            :          * we are unassociated from the previous thread group.
    1072                 :            :          */
    1073                 :      58970 :         retval = de_thread(current);
    1074         [ +  - ]:      58847 :         if (retval)
    1075                 :            :                 goto out;
    1076                 :            : 
    1077                 :      58847 :         set_mm_exe_file(bprm->mm, bprm->file);
    1078                 :            : 
    1079                 :     117936 :         filename_to_taskname(bprm->tcomm, bprm->filename, sizeof(bprm->tcomm));
    1080                 :            :         /*
    1081                 :            :          * Release all of the old mmap stuff
    1082                 :            :          */
    1083                 :      58966 :         acct_arg_size(bprm, 0);
    1084                 :      58900 :         retval = exec_mmap(bprm->mm);
    1085         [ +  - ]:      58976 :         if (retval)
    1086                 :            :                 goto out;
    1087                 :            : 
    1088                 :      58976 :         bprm->mm = NULL;             /* We're using it now */
    1089                 :            : 
    1090                 :            :         set_fs(USER_DS);
    1091                 :      58976 :         current->flags &=
    1092                 :            :                 ~(PF_RANDOMIZE | PF_FORKNOEXEC | PF_KTHREAD | PF_NOFREEZE);
    1093                 :      58976 :         flush_thread();
    1094                 :      58974 :         current->personality &= ~bprm->per_clear;
    1095                 :            : 
    1096                 :      58974 :         return 0;
    1097                 :            : 
    1098                 :            : out:
    1099                 :          0 :         return retval;
    1100                 :            : }
    1101                 :            : EXPORT_SYMBOL(flush_old_exec);
    1102                 :            : 
    1103                 :          0 : void would_dump(struct linux_binprm *bprm, struct file *file)
    1104                 :            : {
    1105         [ -  + ]:     117950 :         if (inode_permission(file_inode(file), MAY_READ) < 0)
    1106                 :          0 :                 bprm->interp_flags |= BINPRM_FLAGS_ENFORCE_NONDUMP;
    1107                 :          0 : }
    1108                 :            : EXPORT_SYMBOL(would_dump);
    1109                 :            : 
    1110                 :          0 : void setup_new_exec(struct linux_binprm * bprm)
    1111                 :            : {
    1112                 :      58976 :         arch_pick_mmap_layout(current->mm);
    1113                 :            : 
    1114                 :            :         /* This is the point of no return */
    1115                 :     117940 :         current->sas_ss_sp = current->sas_ss_size = 0;
    1116                 :            : 
    1117    [ + ][ +  - ]:      58970 :         if (uid_eq(current_euid(), current_uid()) && gid_eq(current_egid(), current_gid()))
    1118                 :      58976 :                 set_dumpable(current->mm, SUID_DUMP_USER);
    1119                 :            :         else
    1120                 :          0 :                 set_dumpable(current->mm, suid_dumpable);
    1121                 :            : 
    1122                 :      58970 :         set_task_comm(current, bprm->tcomm);
    1123                 :            : 
    1124                 :            :         /* Set the new mm task size. We have to do that late because it may
    1125                 :            :          * depend on TIF_32BIT which is only updated in flush_thread() on
    1126                 :            :          * some architectures like powerpc
    1127                 :            :          */
    1128                 :      58976 :         current->mm->task_size = TASK_SIZE;
    1129                 :            : 
    1130                 :            :         /* install the new credentials */
    1131 [ +  - ][ -  + ]:      58976 :         if (!uid_eq(bprm->cred->uid, current_euid()) ||
    1132                 :     117952 :             !gid_eq(bprm->cred->gid, current_egid())) {
    1133                 :          0 :                 current->pdeath_signal = 0;
    1134                 :            :         } else {
    1135                 :      58976 :                 would_dump(bprm, bprm->file);
    1136         [ -  + ]:      58968 :                 if (bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP)
    1137                 :          0 :                         set_dumpable(current->mm, suid_dumpable);
    1138                 :            :         }
    1139                 :            : 
    1140                 :            :         /* An exec changes our domain. We are no longer part of the thread
    1141                 :            :            group */
    1142                 :            : 
    1143                 :      58968 :         current->self_exec_id++;
    1144                 :            :                         
    1145                 :      58968 :         flush_signal_handlers(current, 0);
    1146                 :      58972 :         do_close_on_exec(current->files);
    1147                 :      58970 : }
    1148                 :            : EXPORT_SYMBOL(setup_new_exec);
    1149                 :            : 
    1150                 :            : /*
    1151                 :            :  * Prepare credentials and lock ->cred_guard_mutex.
    1152                 :            :  * install_exec_creds() commits the new creds and drops the lock.
    1153                 :            :  * Or, if exec fails before, free_bprm() should release ->cred and
    1154                 :            :  * and unlock.
    1155                 :            :  */
    1156                 :          0 : int prepare_bprm_creds(struct linux_binprm *bprm)
    1157                 :            : {
    1158         [ +  - ]:      98474 :         if (mutex_lock_interruptible(&current->signal->cred_guard_mutex))
    1159                 :            :                 return -ERESTARTNOINTR;
    1160                 :            : 
    1161                 :      98473 :         bprm->cred = prepare_exec_creds();
    1162         [ -  + ]:      98467 :         if (likely(bprm->cred))
    1163                 :            :                 return 0;
    1164                 :            : 
    1165                 :          0 :         mutex_unlock(&current->signal->cred_guard_mutex);
    1166                 :          0 :         return -ENOMEM;
    1167                 :            : }
    1168                 :            : 
    1169                 :          0 : void free_bprm(struct linux_binprm *bprm)
    1170                 :            : {
    1171                 :            :         free_arg_pages(bprm);
    1172         [ +  + ]:      98472 :         if (bprm->cred) {
    1173                 :      39498 :                 mutex_unlock(&current->signal->cred_guard_mutex);
    1174                 :      39498 :                 abort_creds(bprm->cred);
    1175                 :            :         }
    1176                 :            :         /* If a binfmt changed the interp, free it. */
    1177         [ +  + ]:      98470 :         if (bprm->interp != bprm->filename)
    1178                 :       1188 :                 kfree(bprm->interp);
    1179                 :      98471 :         kfree(bprm);
    1180                 :      98473 : }
    1181                 :            : 
    1182                 :          0 : int bprm_change_interp(char *interp, struct linux_binprm *bprm)
    1183                 :            : {
    1184                 :            :         /* If a binfmt changed the interp, free it first. */
    1185         [ -  + ]:       1189 :         if (bprm->interp != bprm->filename)
    1186                 :          0 :                 kfree(bprm->interp);
    1187                 :       1189 :         bprm->interp = kstrdup(interp, GFP_KERNEL);
    1188         [ +  - ]:       1189 :         if (!bprm->interp)
    1189                 :            :                 return -ENOMEM;
    1190                 :       1189 :         return 0;
    1191                 :            : }
    1192                 :            : EXPORT_SYMBOL(bprm_change_interp);
    1193                 :            : 
    1194                 :            : /*
    1195                 :            :  * install the new credentials for this executable
    1196                 :            :  */
    1197                 :          0 : void install_exec_creds(struct linux_binprm *bprm)
    1198                 :            : {
    1199                 :      58976 :         security_bprm_committing_creds(bprm);
    1200                 :            : 
    1201                 :      58976 :         commit_creds(bprm->cred);
    1202                 :      58976 :         bprm->cred = NULL;
    1203                 :            : 
    1204                 :            :         /*
    1205                 :            :          * Disable monitoring for regular users
    1206                 :            :          * when executing setuid binaries. Must
    1207                 :            :          * wait until new credentials are committed
    1208                 :            :          * by commit_creds() above
    1209                 :            :          */
    1210         [ +  + ]:      58976 :         if (get_dumpable(current->mm) != SUID_DUMP_USER)
    1211                 :         24 :                 perf_event_exit_task(current);
    1212                 :            :         /*
    1213                 :            :          * cred_guard_mutex must be held at least to this point to prevent
    1214                 :            :          * ptrace_attach() from altering our determination of the task's
    1215                 :            :          * credentials; any time after this it may be unlocked.
    1216                 :            :          */
    1217                 :      58976 :         security_bprm_committed_creds(bprm);
    1218                 :      58976 :         mutex_unlock(&current->signal->cred_guard_mutex);
    1219                 :      58976 : }
    1220                 :            : EXPORT_SYMBOL(install_exec_creds);
    1221                 :            : 
    1222                 :            : /*
    1223                 :            :  * determine how safe it is to execute the proposed program
    1224                 :            :  * - the caller must hold ->cred_guard_mutex to protect against
    1225                 :            :  *   PTRACE_ATTACH
    1226                 :            :  */
    1227                 :      98460 : static int check_unsafe_exec(struct linux_binprm *bprm)
    1228                 :            : {
    1229                 :      98460 :         struct task_struct *p = current, *t;
    1230                 :            :         unsigned n_fs;
    1231                 :            :         int res = 0;
    1232                 :            : 
    1233         [ +  + ]:      98460 :         if (p->ptrace) {
    1234         [ -  + ]:        159 :                 if (p->ptrace & PT_PTRACE_CAP)
    1235                 :          0 :                         bprm->unsafe |= LSM_UNSAFE_PTRACE_CAP;
    1236                 :            :                 else
    1237                 :        159 :                         bprm->unsafe |= LSM_UNSAFE_PTRACE;
    1238                 :            :         }
    1239                 :            : 
    1240                 :            :         /*
    1241                 :            :          * This isn't strictly necessary, but it makes it harder for LSMs to
    1242                 :            :          * mess up.
    1243                 :            :          */
    1244         [ -  + ]:      98460 :         if (current->no_new_privs)
    1245                 :          0 :                 bprm->unsafe |= LSM_UNSAFE_NO_NEW_PRIVS;
    1246                 :            : 
    1247                 :            :         n_fs = 1;
    1248                 :          0 :         spin_lock(&p->fs->lock);
    1249                 :            :         rcu_read_lock();
    1250         [ -  + ]:      98461 :         for (t = next_thread(p); t != p; t = next_thread(t)) {
    1251         [ #  # ]:          0 :                 if (t->fs == p->fs)
    1252                 :          0 :                         n_fs++;
    1253                 :            :         }
    1254                 :            :         rcu_read_unlock();
    1255                 :            : 
    1256         [ -  + ]:      98464 :         if (p->fs->users > n_fs) {
    1257                 :          0 :                 bprm->unsafe |= LSM_UNSAFE_SHARE;
    1258                 :            :         } else {
    1259                 :            :                 res = -EAGAIN;
    1260            [ + ]:      98464 :                 if (!p->fs->in_exec) {
    1261                 :      98473 :                         p->fs->in_exec = 1;
    1262                 :            :                         res = 1;
    1263                 :            :                 }
    1264                 :            :         }
    1265                 :      98464 :         spin_unlock(&p->fs->lock);
    1266                 :            : 
    1267                 :      98462 :         return res;
    1268                 :            : }
    1269                 :            : 
    1270                 :            : /* 
    1271                 :            :  * Fill the binprm structure from the inode. 
    1272                 :            :  * Check permissions, then read the first 128 (BINPRM_BUF_SIZE) bytes
    1273                 :            :  *
    1274                 :            :  * This may be called multiple times for binary chains (scripts for example).
    1275                 :            :  */
    1276                 :          0 : int prepare_binprm(struct linux_binprm *bprm)
    1277                 :            : {
    1278                 :      60171 :         struct inode *inode = file_inode(bprm->file);
    1279                 :      60171 :         umode_t mode = inode->i_mode;
    1280                 :            :         int retval;
    1281                 :            : 
    1282                 :            : 
    1283                 :            :         /* clear any previous set[ug]id data from a previous binary */
    1284                 :     120342 :         bprm->cred->euid = current_euid();
    1285                 :     120342 :         bprm->cred->egid = current_egid();
    1286                 :            : 
    1287    [ + ][ +  + ]:      60171 :         if (!(bprm->file->f_path.mnt->mnt_flags & MNT_NOSUID) &&
    1288                 :      60172 :             !current->no_new_privs &&
    1289                 :            :             kuid_has_mapping(bprm->cred->user_ns, inode->i_uid) &&
    1290                 :            :             kgid_has_mapping(bprm->cred->user_ns, inode->i_gid)) {
    1291                 :            :                 /* Set-uid? */
    1292         [ +  + ]:      60171 :                 if (mode & S_ISUID) {
    1293                 :      13160 :                         bprm->per_clear |= PER_CLEAR_ON_SETID;
    1294                 :      13160 :                         bprm->cred->euid = inode->i_uid;
    1295                 :            :                 }
    1296                 :            : 
    1297                 :            :                 /* Set-gid? */
    1298                 :            :                 /*
    1299                 :            :                  * If setgid is set but no group execute bit then this
    1300                 :            :                  * is a candidate for mandatory locking, not a setgid
    1301                 :            :                  * executable.
    1302                 :            :                  */
    1303         [ +  + ]:      60171 :                 if ((mode & (S_ISGID | S_IXGRP)) == (S_ISGID | S_IXGRP)) {
    1304                 :         24 :                         bprm->per_clear |= PER_CLEAR_ON_SETID;
    1305                 :         24 :                         bprm->cred->egid = inode->i_gid;
    1306                 :            :                 }
    1307                 :            :         }
    1308                 :            : 
    1309                 :            :         /* fill in binprm security blob */
    1310                 :      60171 :         retval = security_bprm_set_creds(bprm);
    1311         [ +  + ]:      60157 :         if (retval)
    1312                 :            :                 return retval;
    1313                 :      60156 :         bprm->cred_prepared = 1;
    1314                 :            : 
    1315                 :      60156 :         memset(bprm->buf, 0, BINPRM_BUF_SIZE);
    1316                 :      60156 :         return kernel_read(bprm->file, 0, bprm->buf, BINPRM_BUF_SIZE);
    1317                 :            : }
    1318                 :            : 
    1319                 :            : EXPORT_SYMBOL(prepare_binprm);
    1320                 :            : 
    1321                 :            : /*
    1322                 :            :  * Arguments are '\0' separated strings found at the location bprm->p
    1323                 :            :  * points to; chop off the first by relocating brpm->p to right after
    1324                 :            :  * the first '\0' encountered.
    1325                 :            :  */
    1326                 :          0 : int remove_arg_zero(struct linux_binprm *bprm)
    1327                 :            : {
    1328                 :            :         int ret = 0;
    1329                 :            :         unsigned long offset;
    1330                 :            :         char *kaddr;
    1331                 :            :         struct page *page;
    1332                 :            : 
    1333         [ +  - ]:       1189 :         if (!bprm->argc)
    1334                 :            :                 return 0;
    1335                 :            : 
    1336                 :            :         do {
    1337                 :       1189 :                 offset = bprm->p & ~PAGE_MASK;
    1338                 :       1189 :                 page = get_arg_page(bprm, bprm->p, 0);
    1339         [ +  - ]:       1189 :                 if (!page) {
    1340                 :            :                         ret = -EFAULT;
    1341                 :            :                         goto out;
    1342                 :            :                 }
    1343                 :       1189 :                 kaddr = kmap_atomic(page);
    1344                 :            : 
    1345 [ +  - ][ +  + ]:      43508 :                 for (; offset < PAGE_SIZE && kaddr[offset];
    1346                 :      42319 :                                 offset++, bprm->p++)
    1347                 :            :                         ;
    1348                 :            : 
    1349                 :       1189 :                 kunmap_atomic(kaddr);
    1350                 :            :                 put_arg_page(page);
    1351                 :            : 
    1352                 :            :                 if (offset == PAGE_SIZE)
    1353                 :            :                         free_arg_page(bprm, (bprm->p >> PAGE_SHIFT) - 1);
    1354         [ -  + ]:       1189 :         } while (offset == PAGE_SIZE);
    1355                 :            : 
    1356                 :       1189 :         bprm->p++;
    1357                 :       1189 :         bprm->argc--;
    1358                 :            :         ret = 0;
    1359                 :            : 
    1360                 :            : out:
    1361                 :       1189 :         return ret;
    1362                 :            : }
    1363                 :            : EXPORT_SYMBOL(remove_arg_zero);
    1364                 :            : 
    1365                 :            : #define printable(c) (((c)=='\t') || ((c)=='\n') || (0x20<=(c) && (c)<=0x7e))
    1366                 :            : /*
    1367                 :            :  * cycle the list of binary formats handler, until one recognizes the image
    1368                 :            :  */
    1369                 :          0 : int search_binary_handler(struct linux_binprm *bprm)
    1370                 :            : {
    1371                 :            :         bool need_retry = IS_ENABLED(CONFIG_MODULES);
    1372                 :     179274 :         struct linux_binfmt *fmt;
    1373                 :            :         int retval;
    1374                 :            : 
    1375                 :            :         /* This allows 4 levels of binfmt rewrites before failing hard. */
    1376            [ + ]:      60171 :         if (bprm->recursion_depth > 5)
    1377                 :            :                 return -ELOOP;
    1378                 :            : 
    1379                 :      60172 :         retval = security_bprm_check(bprm);
    1380         [ +  + ]:      60168 :         if (retval)
    1381                 :            :                 return retval;
    1382                 :            : 
    1383                 :            :         retval = -ENOENT;
    1384                 :            :  retry:
    1385                 :      60169 :         read_lock(&binfmt_lock);
    1386         [ +  + ]:     179258 :         list_for_each_entry(fmt, &formats, lh) {
    1387         [ -  + ]:     179246 :                 if (!try_module_get(fmt->module))
    1388                 :          0 :                         continue;
    1389                 :            :                 read_unlock(&binfmt_lock);
    1390                 :     179342 :                 bprm->recursion_depth++;
    1391                 :     179342 :                 retval = fmt->load_binary(bprm);
    1392                 :     179228 :                 bprm->recursion_depth--;
    1393 [ +  + ][ +  - ]:     179228 :                 if (retval >= 0 || retval != -ENOEXEC ||
    1394            [ + ]:     119076 :                     bprm->mm == NULL || bprm->file == NULL) {
    1395                 :            :                         put_binfmt(fmt);
    1396                 :      60164 :                         return retval;
    1397                 :            :                 }
    1398                 :     119078 :                 read_lock(&binfmt_lock);
    1399                 :            :                 put_binfmt(fmt);
    1400                 :            :         }
    1401                 :            :         read_unlock(&binfmt_lock);
    1402                 :            : 
    1403         [ +  + ]:         12 :         if (need_retry && retval == -ENOEXEC) {
    1404 [ +  + ][ +  - ]:          7 :                 if (printable(bprm->buf[0]) && printable(bprm->buf[1]) &&
                 [ +  - ]
    1405         [ -  + ]:          2 :                     printable(bprm->buf[2]) && printable(bprm->buf[3]))
    1406                 :            :                         return retval;
    1407         [ +  - ]:          5 :                 if (request_module("binfmt-%04x", *(ushort *)(bprm->buf + 2)) < 0)
    1408                 :            :                         return retval;
    1409                 :            :                 need_retry = false;
    1410                 :            :                 goto retry;
    1411                 :            :         }
    1412                 :            : 
    1413                 :            :         return retval;
    1414                 :            : }
    1415                 :            : EXPORT_SYMBOL(search_binary_handler);
    1416                 :            : 
    1417                 :          0 : static int exec_binprm(struct linux_binprm *bprm)
    1418                 :            : {
    1419                 :            :         pid_t old_pid, old_vpid;
    1420                 :            :         int ret;
    1421                 :            : 
    1422                 :            :         /* Need to fetch pid before load_binary changes it */
    1423                 :      58984 :         old_pid = current->pid;
    1424                 :            :         rcu_read_lock();
    1425                 :      58983 :         old_vpid = task_pid_nr_ns(current, task_active_pid_ns(current->parent));
    1426                 :            :         rcu_read_unlock();
    1427                 :            : 
    1428                 :      58984 :         ret = search_binary_handler(bprm);
    1429         [ +  + ]:      58981 :         if (ret >= 0) {
    1430                 :            :                 audit_bprm(bprm);
    1431                 :      58976 :                 trace_sched_process_exec(current, old_pid, bprm);
    1432                 :      58976 :                 ptrace_event(PTRACE_EVENT_EXEC, old_vpid);
    1433                 :      58976 :                 current->did_exec = 1;
    1434                 :      58976 :                 proc_exec_connector(current);
    1435                 :            : 
    1436         [ +  + ]:      58976 :                 if (bprm->file) {
    1437                 :            :                         allow_write_access(bprm->file);
    1438                 :      58972 :                         fput(bprm->file);
    1439                 :      58975 :                         bprm->file = NULL; /* to catch use-after-free */
    1440                 :            :                 }
    1441                 :            :         }
    1442                 :            : 
    1443                 :      58991 :         return ret;
    1444                 :            : }
    1445                 :            : 
    1446                 :            : /*
    1447                 :            :  * sys_execve() executes a new program.
    1448                 :            :  */
    1449                 :          0 : static int do_execve_common(const char *filename,
    1450                 :            :                                 struct user_arg_ptr argv,
    1451                 :            :                                 struct user_arg_ptr envp)
    1452                 :            : {
    1453                 :            :         struct linux_binprm *bprm;
    1454                 :            :         struct file *file;
    1455                 :            :         struct files_struct *displaced;
    1456                 :            :         bool clear_in_exec;
    1457                 :            :         int retval;
    1458                 :            : 
    1459                 :            :         /*
    1460                 :            :          * We move the actual failure in case of RLIMIT_NPROC excess from
    1461                 :            :          * set*uid() to execve() because too many poorly written programs
    1462                 :            :          * don't check setuid() return code.  Here we additionally recheck
    1463                 :            :          * whether NPROC limit is still exceeded.
    1464                 :            :          */
    1465 [ -  + ][ #  # ]:      98474 :         if ((current->flags & PF_NPROC_EXCEEDED) &&
    1466                 :          0 :             atomic_read(&current_user()->processes) > rlimit(RLIMIT_NPROC)) {
    1467                 :            :                 retval = -EAGAIN;
    1468                 :            :                 goto out_ret;
    1469                 :            :         }
    1470                 :            : 
    1471                 :            :         /* We're below the limit (still or again), so we don't want to make
    1472                 :            :          * further execve() calls fail. */
    1473                 :      98474 :         current->flags &= ~PF_NPROC_EXCEEDED;
    1474                 :            : 
    1475                 :      98474 :         retval = unshare_files(&displaced);
    1476         [ +  - ]:      98473 :         if (retval)
    1477                 :            :                 goto out_ret;
    1478                 :            : 
    1479                 :            :         retval = -ENOMEM;
    1480                 :            :         bprm = kzalloc(sizeof(*bprm), GFP_KERNEL);
    1481         [ +  - ]:      98474 :         if (!bprm)
    1482                 :            :                 goto out_files;
    1483                 :            : 
    1484                 :      98474 :         retval = prepare_bprm_creds(bprm);
    1485         [ +  - ]:      98474 :         if (retval)
    1486                 :            :                 goto out_free;
    1487                 :            : 
    1488                 :      98474 :         retval = check_unsafe_exec(bprm);
    1489         [ +  + ]:      98462 :         if (retval < 0)
    1490                 :            :                 goto out_free;
    1491                 :            :         clear_in_exec = retval;
    1492                 :      98461 :         current->in_execve = 1;
    1493                 :            : 
    1494                 :      98461 :         file = open_exec(filename);
    1495                 :            :         retval = PTR_ERR(file);
    1496         [ +  + ]:      98464 :         if (IS_ERR(file))
    1497                 :            :                 goto out_unmark;
    1498                 :            : 
    1499                 :      58974 :         sched_exec();
    1500                 :            : 
    1501                 :      58973 :         bprm->file = file;
    1502                 :      58973 :         bprm->filename = filename;
    1503                 :      58973 :         bprm->interp = filename;
    1504                 :            : 
    1505                 :      58973 :         retval = bprm_mm_init(bprm);
    1506            [ + ]:      58926 :         if (retval)
    1507                 :            :                 goto out_file;
    1508                 :            : 
    1509                 :      58984 :         bprm->argc = count(argv, MAX_ARG_STRINGS);
    1510         [ +  - ]:      58969 :         if ((retval = bprm->argc) < 0)
    1511                 :            :                 goto out;
    1512                 :            : 
    1513                 :      58969 :         bprm->envc = count(envp, MAX_ARG_STRINGS);
    1514         [ +  + ]:      58979 :         if ((retval = bprm->envc) < 0)
    1515                 :            :                 goto out;
    1516                 :            : 
    1517                 :      58978 :         retval = prepare_binprm(bprm);
    1518         [ +  - ]:      58973 :         if (retval < 0)
    1519                 :            :                 goto out;
    1520                 :            : 
    1521                 :      58973 :         retval = copy_strings_kernel(1, &bprm->filename, bprm);
    1522            [ + ]:      58975 :         if (retval < 0)
    1523                 :            :                 goto out;
    1524                 :            : 
    1525                 :      58984 :         bprm->exec = bprm->p;
    1526                 :      58984 :         retval = copy_strings(bprm->envc, envp, bprm);
    1527         [ +  - ]:      58984 :         if (retval < 0)
    1528                 :            :                 goto out;
    1529                 :            : 
    1530                 :      58984 :         retval = copy_strings(bprm->argc, argv, bprm);
    1531         [ +  - ]:      58984 :         if (retval < 0)
    1532                 :            :                 goto out;
    1533                 :            : 
    1534                 :      58984 :         retval = exec_binprm(bprm);
    1535         [ +  + ]:      58980 :         if (retval < 0)
    1536                 :            :                 goto out;
    1537                 :            : 
    1538                 :            :         /* execve succeeded */
    1539                 :      58972 :         current->fs->in_exec = 0;
    1540                 :      58972 :         current->in_execve = 0;
    1541                 :            :         acct_update_integrals(current);
    1542                 :            :         task_numa_free(current);
    1543                 :      58972 :         free_bprm(bprm);
    1544         [ -  + ]:      58974 :         if (displaced)
    1545                 :          0 :                 put_files_struct(displaced);
    1546                 :      58976 :         return retval;
    1547                 :            : 
    1548                 :            : out:
    1549         [ #  # ]:          0 :         if (bprm->mm) {
    1550                 :          8 :                 acct_arg_size(bprm, 0);
    1551                 :          8 :                 mmput(bprm->mm);
    1552                 :            :         }
    1553                 :            : 
    1554                 :            : out_file:
    1555         [ +  + ]:      98482 :         if (bprm->file) {
    1556                 :            :                 allow_write_access(bprm->file);
    1557                 :          7 :                 fput(bprm->file);
    1558                 :            :         }
    1559                 :            : 
    1560                 :            : out_unmark:
    1561         [ +  - ]:      39498 :         if (clear_in_exec)
    1562                 :      39498 :                 current->fs->in_exec = 0;
    1563                 :      39498 :         current->in_execve = 0;
    1564                 :            : 
    1565                 :            : out_free:
    1566                 :      39499 :         free_bprm(bprm);
    1567                 :            : 
    1568                 :            : out_files:
    1569         [ -  + ]:      39498 :         if (displaced)
    1570                 :          0 :                 reset_files_struct(displaced);
    1571                 :            : out_ret:
    1572                 :      39498 :         return retval;
    1573                 :            : }
    1574                 :            : 
    1575                 :          0 : int do_execve(const char *filename,
    1576                 :            :         const char __user *const __user *__argv,
    1577                 :            :         const char __user *const __user *__envp)
    1578                 :            : {
    1579                 :      98474 :         struct user_arg_ptr argv = { .ptr.native = __argv };
    1580                 :      98474 :         struct user_arg_ptr envp = { .ptr.native = __envp };
    1581                 :      98474 :         return do_execve_common(filename, argv, envp);
    1582                 :            : }
    1583                 :            : 
    1584                 :            : #ifdef CONFIG_COMPAT
    1585                 :            : static int compat_do_execve(const char *filename,
    1586                 :            :         const compat_uptr_t __user *__argv,
    1587                 :            :         const compat_uptr_t __user *__envp)
    1588                 :            : {
    1589                 :            :         struct user_arg_ptr argv = {
    1590                 :            :                 .is_compat = true,
    1591                 :            :                 .ptr.compat = __argv,
    1592                 :            :         };
    1593                 :            :         struct user_arg_ptr envp = {
    1594                 :            :                 .is_compat = true,
    1595                 :            :                 .ptr.compat = __envp,
    1596                 :            :         };
    1597                 :            :         return do_execve_common(filename, argv, envp);
    1598                 :            : }
    1599                 :            : #endif
    1600                 :            : 
    1601                 :          0 : void set_binfmt(struct linux_binfmt *new)
    1602                 :            : {
    1603                 :      58976 :         struct mm_struct *mm = current->mm;
    1604                 :            : 
    1605         [ -  + ]:      58976 :         if (mm->binfmt)
    1606                 :          0 :                 module_put(mm->binfmt->module);
    1607                 :            : 
    1608                 :      58976 :         mm->binfmt = new;
    1609         [ +  - ]:      58976 :         if (new)
    1610                 :      58976 :                 __module_get(new->module);
    1611                 :      58976 : }
    1612                 :            : 
    1613                 :            : EXPORT_SYMBOL(set_binfmt);
    1614                 :            : 
    1615                 :            : /*
    1616                 :            :  * set_dumpable converts traditional three-value dumpable to two flags and
    1617                 :            :  * stores them into mm->flags.  It modifies lower two bits of mm->flags, but
    1618                 :            :  * these bits are not changed atomically.  So get_dumpable can observe the
    1619                 :            :  * intermediate state.  To avoid doing unexpected behavior, get get_dumpable
    1620                 :            :  * return either old dumpable or new one by paying attention to the order of
    1621                 :            :  * modifying the bits.
    1622                 :            :  *
    1623                 :            :  * dumpable |   mm->flags (binary)
    1624                 :            :  * old  new | initial interim  final
    1625                 :            :  * ---------+-----------------------
    1626                 :            :  *  0    1  |   00      01      01
    1627                 :            :  *  0    2  |   00      10(*)   11
    1628                 :            :  *  1    0  |   01      00      00
    1629                 :            :  *  1    2  |   01      11      11
    1630                 :            :  *  2    0  |   11      10(*)   00
    1631                 :            :  *  2    1  |   11      11      01
    1632                 :            :  *
    1633                 :            :  * (*) get_dumpable regards interim value of 10 as 11.
    1634                 :            :  */
    1635                 :          0 : void set_dumpable(struct mm_struct *mm, int value)
    1636                 :            : {
    1637   [ +  +  -  - ]:      64092 :         switch (value) {
    1638                 :            :         case SUID_DUMP_DISABLE:
    1639                 :       5120 :                 clear_bit(MMF_DUMPABLE, &mm->flags);
    1640                 :       5120 :                 smp_wmb();
    1641                 :       5120 :                 clear_bit(MMF_DUMP_SECURELY, &mm->flags);
    1642                 :       5120 :                 break;
    1643                 :            :         case SUID_DUMP_USER:
    1644                 :      58972 :                 set_bit(MMF_DUMPABLE, &mm->flags);
    1645                 :      58969 :                 smp_wmb();
    1646                 :      58967 :                 clear_bit(MMF_DUMP_SECURELY, &mm->flags);
    1647                 :      58975 :                 break;
    1648                 :            :         case SUID_DUMP_ROOT:
    1649                 :          0 :                 set_bit(MMF_DUMP_SECURELY, &mm->flags);
    1650                 :          0 :                 smp_wmb();
    1651                 :          0 :                 set_bit(MMF_DUMPABLE, &mm->flags);
    1652                 :          0 :                 break;
    1653                 :            :         }
    1654                 :          3 : }
    1655                 :            : 
    1656                 :          0 : int __get_dumpable(unsigned long mm_flags)
    1657                 :            : {
    1658                 :            :         int ret;
    1659                 :            : 
    1660                 :     174752 :         ret = mm_flags & MMF_DUMPABLE_MASK;
    1661                 :     115776 :         return (ret > SUID_DUMP_USER) ? SUID_DUMP_ROOT : ret;
    1662                 :            : }
    1663                 :            : 
    1664                 :            : /*
    1665                 :            :  * This returns the actual value of the suid_dumpable flag. For things
    1666                 :            :  * that are using this for checking for privilege transitions, it must
    1667                 :            :  * test against SUID_DUMP_USER rather than treating it as a boolean
    1668                 :            :  * value.
    1669                 :            :  */
    1670                 :          0 : int get_dumpable(struct mm_struct *mm)
    1671                 :            : {
    1672                 :     290452 :         return __get_dumpable(mm->flags);
    1673                 :            : }
    1674                 :            : 
    1675                 :          0 : SYSCALL_DEFINE3(execve,
    1676                 :            :                 const char __user *, filename,
    1677                 :            :                 const char __user *const __user *, argv,
    1678                 :            :                 const char __user *const __user *, envp)
    1679                 :            : {
    1680                 :      98339 :         struct filename *path = getname(filename);
    1681                 :            :         int error = PTR_ERR(path);
    1682         [ +  + ]:      98339 :         if (!IS_ERR(path)) {
    1683                 :      98338 :                 error = do_execve(path->name, argv, envp);
    1684                 :      98337 :                 putname(path);
    1685                 :            :         }
    1686                 :            :         return error;
    1687                 :            : }
    1688                 :            : #ifdef CONFIG_COMPAT
    1689                 :            : asmlinkage long compat_sys_execve(const char __user * filename,
    1690                 :            :         const compat_uptr_t __user * argv,
    1691                 :            :         const compat_uptr_t __user * envp)
    1692                 :            : {
    1693                 :            :         struct filename *path = getname(filename);
    1694                 :            :         int error = PTR_ERR(path);
    1695                 :            :         if (!IS_ERR(path)) {
    1696                 :            :                 error = compat_do_execve(path->name, argv, envp);
    1697                 :            :                 putname(path);
    1698                 :            :         }
    1699                 :            :         return error;
    1700                 :            : }
    1701                 :            : #endif

Generated by: LCOV version 1.9