Lines Matching refs:bprm
80 static int bprm_creds_from_file(struct linux_binprm *bprm);
181 * The nascent bprm->mm is not visible until exec_mmap() but it can
186 static void acct_arg_size(struct linux_binprm *bprm, unsigned long pages)
189 long diff = (long)(pages - bprm->vma_pages);
194 bprm->vma_pages = pages;
198 static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
202 struct vm_area_struct *vma = bprm->vma;
203 struct mm_struct *mm = bprm->mm;
234 acct_arg_size(bprm, vma_pages(vma));
244 static void free_arg_pages(struct linux_binprm *bprm)
248 static void flush_arg_page(struct linux_binprm *bprm, unsigned long pos,
251 flush_cache_page(bprm->vma, pos, page_to_pfn(page));
254 static int __bprm_mm_init(struct linux_binprm *bprm)
258 struct mm_struct *mm = bprm->mm;
260 bprm->vma = vma = vm_area_alloc(mm);
288 bprm->p = vma->vm_end - sizeof(void *);
293 bprm->vma = NULL;
298 static bool valid_arg_len(struct linux_binprm *bprm, long len)
305 static inline void acct_arg_size(struct linux_binprm *bprm, unsigned long pages)
309 static struct page *get_arg_page(struct linux_binprm *bprm, unsigned long pos,
314 page = bprm->page[pos / PAGE_SIZE];
319 bprm->page[pos / PAGE_SIZE] = page;
329 static void free_arg_page(struct linux_binprm *bprm, int i)
331 if (bprm->page[i]) {
332 __free_page(bprm->page[i]);
333 bprm->page[i] = NULL;
337 static void free_arg_pages(struct linux_binprm *bprm)
342 free_arg_page(bprm, i);
345 static void flush_arg_page(struct linux_binprm *bprm, unsigned long pos,
350 static int __bprm_mm_init(struct linux_binprm *bprm)
352 bprm->p = PAGE_SIZE * MAX_ARG_PAGES - sizeof(void *);
356 static bool valid_arg_len(struct linux_binprm *bprm, long len)
358 return len <= bprm->p;
369 static int bprm_mm_init(struct linux_binprm *bprm)
374 bprm->mm = mm = mm_alloc();
381 bprm->rlim_stack = current->signal->rlim[RLIMIT_STACK];
384 err = __bprm_mm_init(bprm);
392 bprm->mm = NULL;
478 static int bprm_stack_limits(struct linux_binprm *bprm)
491 limit = min(limit, bprm->rlim_stack.rlim_cur / 4);
510 ptr_size = (max(bprm->argc, 1) + bprm->envc) * sizeof(void *);
515 bprm->argmin = bprm->p - limit;
525 struct linux_binprm *bprm)
547 if (!valid_arg_len(bprm, len))
551 pos = bprm->p;
553 bprm->p -= len;
555 if (bprm->p < bprm->argmin)
584 page = get_arg_page(bprm, pos, 1);
598 flush_arg_page(bprm, kpos, kmapped_page);
619 int copy_string_kernel(const char *arg, struct linux_binprm *bprm)
622 unsigned long pos = bprm->p;
626 if (!valid_arg_len(bprm, len))
631 bprm->p -= len;
632 if (IS_ENABLED(CONFIG_MMU) && bprm->p < bprm->argmin)
644 page = get_arg_page(bprm, pos, 1);
647 flush_arg_page(bprm, pos & PAGE_MASK, page);
657 struct linux_binprm *bprm)
660 int ret = copy_string_kernel(argv[argc], bprm);
750 int setup_arg_pages(struct linux_binprm *bprm,
757 struct vm_area_struct *vma = bprm->vma;
769 stack_base = bprm->rlim_stack.rlim_max;
783 mm->arg_start = bprm->p - stack_shift;
784 bprm->p = vma->vm_end - stack_shift;
795 bprm->p -= stack_shift;
796 mm->arg_start = bprm->p;
799 if (bprm->loader)
800 bprm->loader -= stack_shift;
801 bprm->exec -= stack_shift;
833 bprm->file);
852 rlim_stack = bprm->rlim_stack.rlim_cur & PAGE_MASK;
861 current->mm->start_stack = bprm->p;
878 int transfer_args_to_stack(struct linux_binprm *bprm,
884 stop = bprm->p >> PAGE_SHIFT;
888 unsigned int offset = index == stop ? bprm->p & ~PAGE_MASK : 0;
889 char *src = kmap_local_page(bprm->page[index]) + offset;
1247 int begin_new_exec(struct linux_binprm * bprm)
1253 retval = bprm_creds_from_file(bprm);
1260 bprm->point_of_no_return = true;
1280 * Must be called _before_ exec_mmap() as bprm->mm is
1284 retval = set_mm_exe_file(bprm->mm, bprm->file);
1289 would_dump(bprm, bprm->file);
1290 if (bprm->have_execfd)
1291 would_dump(bprm, bprm->executable);
1296 acct_arg_size(bprm, 0);
1297 retval = exec_mmap(bprm->mm);
1301 bprm->mm = NULL;
1325 me->personality &= ~bprm->per_clear;
1337 if (bprm->secureexec) {
1348 if (bprm->rlim_stack.rlim_cur > _STK_LIM)
1349 bprm->rlim_stack.rlim_cur = _STK_LIM;
1357 * bprm->secureexec instead.
1359 if (bprm->interp_flags & BINPRM_FLAGS_ENFORCE_NONDUMP ||
1367 __set_task_comm(me, kbasename(bprm->filename), true);
1374 retval = set_cred_ucounts(bprm->cred);
1381 security_bprm_committing_creds(bprm);
1383 commit_creds(bprm->cred);
1384 bprm->cred = NULL;
1399 security_bprm_committed_creds(bprm);
1402 if (bprm->have_execfd) {
1406 fd_install(retval, bprm->executable);
1407 bprm->executable = NULL;
1408 bprm->execfd = retval;
1414 if (!bprm->cred)
1422 void would_dump(struct linux_binprm *bprm, struct file *file)
1428 bprm->interp_flags |= BINPRM_FLAGS_ENFORCE_NONDUMP;
1431 user_ns = old = bprm->mm->user_ns;
1437 bprm->mm->user_ns = get_user_ns(user_ns);
1444 void setup_new_exec(struct linux_binprm * bprm)
1449 arch_pick_mmap_layout(me->mm, &bprm->rlim_stack);
1464 void finalize_exec(struct linux_binprm *bprm)
1468 current->signal->rlim[RLIMIT_STACK] = bprm->rlim_stack;
1479 static int prepare_bprm_creds(struct linux_binprm *bprm)
1484 bprm->cred = prepare_exec_creds();
1485 if (likely(bprm->cred))
1492 static void free_bprm(struct linux_binprm *bprm)
1494 if (bprm->mm) {
1495 acct_arg_size(bprm, 0);
1496 mmput(bprm->mm);
1498 free_arg_pages(bprm);
1499 if (bprm->cred) {
1501 abort_creds(bprm->cred);
1503 if (bprm->file) {
1504 allow_write_access(bprm->file);
1505 fput(bprm->file);
1507 if (bprm->executable)
1508 fput(bprm->executable);
1510 if (bprm->interp != bprm->filename)
1511 kfree(bprm->interp);
1512 kfree(bprm->fdpath);
1513 kfree(bprm);
1518 struct linux_binprm *bprm = kzalloc(sizeof(*bprm), GFP_KERNEL);
1520 if (!bprm)
1524 bprm->filename = filename->name;
1527 bprm->fdpath = kasprintf(GFP_KERNEL, "/dev/fd/%d", fd);
1529 bprm->fdpath = kasprintf(GFP_KERNEL, "/dev/fd/%d/%s",
1531 if (!bprm->fdpath)
1534 bprm->filename = bprm->fdpath;
1536 bprm->interp = bprm->filename;
1538 retval = bprm_mm_init(bprm);
1541 return bprm;
1544 free_bprm(bprm);
1549 int bprm_change_interp(const char *interp, struct linux_binprm *bprm)
1552 if (bprm->interp != bprm->filename)
1553 kfree(bprm->interp);
1554 bprm->interp = kstrdup(interp, GFP_KERNEL);
1555 if (!bprm->interp)
1566 static void check_unsafe_exec(struct linux_binprm *bprm)
1572 bprm->unsafe |= LSM_UNSAFE_PTRACE;
1579 bprm->unsafe |= LSM_UNSAFE_NO_NEW_PRIVS;
1598 bprm->unsafe |= LSM_UNSAFE_SHARE;
1604 static void bprm_fill_uid(struct linux_binprm *bprm, struct file *file)
1635 if (!vfsuid_has_mapping(bprm->cred->user_ns, vfsuid) ||
1636 !vfsgid_has_mapping(bprm->cred->user_ns, vfsgid))
1640 bprm->per_clear |= PER_CLEAR_ON_SETID;
1641 bprm->cred->euid = vfsuid_into_kuid(vfsuid);
1645 bprm->per_clear |= PER_CLEAR_ON_SETID;
1646 bprm->cred->egid = vfsgid_into_kgid(vfsgid);
1653 static int bprm_creds_from_file(struct linux_binprm *bprm)
1656 struct file *file = bprm->execfd_creds ? bprm->executable : bprm->file;
1658 bprm_fill_uid(bprm, file);
1659 return security_bprm_creds_from_file(bprm, file);
1668 static int prepare_binprm(struct linux_binprm *bprm)
1672 memset(bprm->buf, 0, BINPRM_BUF_SIZE);
1673 return kernel_read(bprm->file, bprm->buf, BINPRM_BUF_SIZE, &pos);
1677 * Arguments are '\0' separated strings found at the location bprm->p
1681 int remove_arg_zero(struct linux_binprm *bprm)
1688 if (!bprm->argc)
1692 offset = bprm->p & ~PAGE_MASK;
1693 page = get_arg_page(bprm, bprm->p, 0);
1701 offset++, bprm->p++)
1708 bprm->p++;
1709 bprm->argc--;
1721 static int search_binary_handler(struct linux_binprm *bprm)
1727 retval = prepare_binprm(bprm);
1731 retval = security_bprm_check(bprm);
1743 retval = fmt->load_binary(bprm);
1747 if (bprm->point_of_no_return || (retval != -ENOEXEC)) {
1755 if (printable(bprm->buf[0]) && printable(bprm->buf[1]) &&
1756 printable(bprm->buf[2]) && printable(bprm->buf[3]))
1758 if (request_module("binfmt-%04x", *(ushort *)(bprm->buf + 2)) < 0)
1768 static int exec_binprm(struct linux_binprm *bprm)
1785 ret = search_binary_handler(bprm);
1788 if (!bprm->interpreter)
1791 exec = bprm->file;
1792 bprm->file = bprm->interpreter;
1793 bprm->interpreter = NULL;
1796 if (unlikely(bprm->have_execfd)) {
1797 if (bprm->executable) {
1801 bprm->executable = exec;
1806 audit_bprm(bprm);
1807 trace_sched_process_exec(current, old_pid, bprm);
1816 static int bprm_execve(struct linux_binprm *bprm,
1822 retval = prepare_bprm_creds(bprm);
1831 check_unsafe_exec(bprm);
1842 bprm->file = file;
1852 if (bprm->fdpath && get_close_on_exec(fd))
1853 bprm->interp_flags |= BINPRM_FLAGS_PATH_INACCESSIBLE;
1855 /* Set the unchanging part of bprm->cred */
1856 retval = security_bprm_creds_for_exec(bprm);
1860 retval = exec_binprm(bprm);
1882 if (bprm->point_of_no_return && !fatal_signal_pending(current))
1898 struct linux_binprm *bprm;
1920 bprm = alloc_bprm(fd, filename);
1921 if (IS_ERR(bprm)) {
1922 retval = PTR_ERR(bprm);
1929 current->comm, bprm->filename);
1932 bprm->argc = retval;
1937 bprm->envc = retval;
1939 retval = bprm_stack_limits(bprm);
1943 retval = copy_string_kernel(bprm->filename, bprm);
1946 bprm->exec = bprm->p;
1948 retval = copy_strings(bprm->envc, envp, bprm);
1952 retval = copy_strings(bprm->argc, argv, bprm);
1962 if (bprm->argc == 0) {
1963 retval = copy_string_kernel("", bprm);
1966 bprm->argc = 1;
1969 retval = bprm_execve(bprm, fd, filename, flags);
1971 free_bprm(bprm);
1982 struct linux_binprm *bprm;
1994 bprm = alloc_bprm(fd, filename);
1995 if (IS_ERR(bprm)) {
1996 retval = PTR_ERR(bprm);
2005 bprm->argc = retval;
2010 bprm->envc = retval;
2012 retval = bprm_stack_limits(bprm);
2016 retval = copy_string_kernel(bprm->filename, bprm);
2019 bprm->exec = bprm->p;
2021 retval = copy_strings_kernel(bprm->envc, envp, bprm);
2025 retval = copy_strings_kernel(bprm->argc, argv, bprm);
2029 retval = bprm_execve(bprm, fd, filename, 0);
2031 free_bprm(bprm);