Lines Matching refs:imgp

367 execve_nosetid(struct image_params *imgp)  in execve_nosetid()  argument
369 imgp->credential_setid = false; in execve_nosetid()
370 if (imgp->newcred != NULL) { in execve_nosetid()
371 crfree(imgp->newcred); in execve_nosetid()
372 imgp->newcred = NULL; in execve_nosetid()
389 struct image_params image_params, *imgp; in do_execve() local
413 imgp = &image_params; in do_execve()
437 bzero(imgp, sizeof(*imgp)); in do_execve()
438 imgp->proc = p; in do_execve()
439 imgp->attr = &attr; in do_execve()
440 imgp->args = args; in do_execve()
447 error = mac_execve_enter(imgp, mac_p); in do_execve()
490 imgp->vp = newtextvp; in do_execve()
496 imgp->execpath = args->fname; in do_execve()
498 VOP_UNLOCK(imgp->vp); in do_execve()
501 newbinname, nd.ni_cnd.cn_namelen, &imgp->execpath, in do_execve()
502 &imgp->freepath, &freepath_size) != 0) in do_execve()
503 imgp->execpath = args->fname; in do_execve()
504 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
506 } else if (imgp->interpreter_vp) { in do_execve()
510 newtextvp = imgp->interpreter_vp; in do_execve()
511 imgp->interpreter_vp = NULL; in do_execve()
512 if (vn_fullpath(newtextvp, &imgp->execpath, in do_execve()
513 &imgp->freepath) != 0) in do_execve()
514 imgp->execpath = args->fname; in do_execve()
517 imgp->vp = newtextvp; in do_execve()
534 if (vn_fullpath(newtextvp, &imgp->execpath, in do_execve()
535 &imgp->freepath) != 0) in do_execve()
536 imgp->execpath = args->fname; in do_execve()
539 imgp->vp = newtextvp; in do_execve()
546 error = exec_check_permissions(imgp); in do_execve()
550 imgp->object = imgp->vp->v_object; in do_execve()
551 if (imgp->object != NULL) in do_execve()
552 vm_object_reference(imgp->object); in do_execve()
554 error = exec_map_first_page(imgp); in do_execve()
558 imgp->proc->p_osrel = 0; in do_execve()
559 imgp->proc->p_fctl0 = 0; in do_execve()
560 imgp->proc->p_elf_brandinfo = NULL; in do_execve()
588 will_transition = mac_vnode_execve_will_transition(oldcred, imgp->vp, in do_execve()
589 interpvplabel, imgp) != 0; in do_execve()
595 imgp->proc->p_pdeathsig = 0; in do_execve()
601 (imgp->vp->v_mount->mnt_flag & MNT_NOSUID) == 0 && in do_execve()
603 imgp->credential_setid = true; in do_execve()
604 VOP_UNLOCK(imgp->vp); in do_execve()
605 imgp->newcred = crdup(oldcred); in do_execve()
608 change_euid(imgp->newcred, euip); in do_execve()
610 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
612 change_egid(imgp->newcred, attr.va_gid); in do_execve()
620 change_svuid(imgp->newcred, imgp->newcred->cr_uid); in do_execve()
621 change_svgid(imgp->newcred, imgp->newcred->cr_gid); in do_execve()
637 VOP_UNLOCK(imgp->vp); in do_execve()
638 imgp->newcred = crdup(oldcred); in do_execve()
639 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
640 change_svuid(imgp->newcred, imgp->newcred->cr_uid); in do_execve()
641 change_svgid(imgp->newcred, imgp->newcred->cr_gid); in do_execve()
655 error = (*execsw[i]->ex_imgact)(imgp); in do_execve()
668 if (imgp->interpreted) { in do_execve()
669 exec_unmap_first_page(imgp); in do_execve()
677 MPASS(imgp->textset); in do_execve()
679 imgp->textset = false; in do_execve()
684 if (imgp->opened) { in do_execve()
686 imgp->opened = false; in do_execve()
689 imgp->vp = newtextvp = NULL; in do_execve()
699 vm_object_deallocate(imgp->object); in do_execve()
700 imgp->object = NULL; in do_execve()
701 execve_nosetid(imgp); in do_execve()
702 imgp->execpath = NULL; in do_execve()
703 free(imgp->freepath, M_TEMP); in do_execve()
704 imgp->freepath = NULL; in do_execve()
706 if (imgp->interpreter_vp) { in do_execve()
709 args->fname = imgp->interpreter_name; in do_execve()
718 VOP_UNLOCK(imgp->vp); in do_execve()
724 imgp->execpath != NULL ? imgp->execpath : "<unresolved>"); in do_execve()
725 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
732 error = (*p->p_sysent->sv_copyout_strings)(imgp, &stack_base); in do_execve()
734 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
741 error = (*p->p_sysent->sv_fixup)(&stack_base, imgp); in do_execve()
743 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
759 i = exec_args_get_begin_envv(imgp->args) - imgp->args->begin_argv; in do_execve()
763 bcopy(imgp->args->begin_argv, newargs->ar_args, i); in do_execve()
778 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
819 if ((imgp->sysent->sv_setid_allowed != NULL && in do_execve()
820 !(*imgp->sysent->sv_setid_allowed)(td, imgp)) || in do_execve()
822 execve_nosetid(imgp); in do_execve()
827 if (imgp->credential_setid) { in do_execve()
845 VOP_UNLOCK(imgp->vp); in do_execve()
848 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
854 mac_vnode_execve_transition(oldcred, imgp->newcred, in do_execve()
855 imgp->vp, interpvplabel, imgp); in do_execve()
866 if (imgp->newcred != NULL) { in do_execve()
867 proc_set_cred(p, imgp->newcred); in do_execve()
922 VOP_UNLOCK(imgp->vp); in do_execve()
924 pe.pm_baseaddr = imgp->reloc_base; in do_execve()
925 pe.pm_dynaddr = imgp->et_dyn_addr; in do_execve()
928 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
933 (*p->p_sysent->sv_setregs)(td, imgp, stack_base); in do_execve()
935 VOP_MMAPPED(imgp->vp); in do_execve()
946 if (imgp->firstpage != NULL) in do_execve()
947 exec_unmap_first_page(imgp); in do_execve()
949 if (imgp->vp != NULL) { in do_execve()
950 if (imgp->opened) in do_execve()
951 VOP_CLOSE(imgp->vp, FREAD, td->td_ucred, td); in do_execve()
952 if (imgp->textset) in do_execve()
953 VOP_UNSET_TEXT_CHECKED(imgp->vp); in do_execve()
955 vput(imgp->vp); in do_execve()
957 VOP_UNLOCK(imgp->vp); in do_execve()
965 if (imgp->object != NULL) in do_execve()
966 vm_object_deallocate(imgp->object); in do_execve()
968 free(imgp->freepath, M_TEMP); in do_execve()
987 if (imgp->newcred != NULL && oldcred != NULL) in do_execve()
988 crfree(imgp->newcred); in do_execve()
991 mac_execve_exit(imgp); in do_execve()
1014 if (error && imgp->vmspace_destroyed) { in do_execve()
1047 exec_map_first_page(struct image_params *imgp) in exec_map_first_page() argument
1053 if (imgp->firstpage != NULL) in exec_map_first_page()
1054 exec_unmap_first_page(imgp); in exec_map_first_page()
1056 object = imgp->vp->v_object; in exec_map_first_page()
1072 imgp->firstpage = sf_buf_alloc(m, 0); in exec_map_first_page()
1073 imgp->image_header = (char *)sf_buf_kva(imgp->firstpage); in exec_map_first_page()
1079 exec_unmap_first_page(struct image_params *imgp) in exec_unmap_first_page() argument
1083 if (imgp->firstpage != NULL) { in exec_unmap_first_page()
1084 m = sf_buf_page(imgp->firstpage); in exec_unmap_first_page()
1085 sf_buf_free(imgp->firstpage); in exec_unmap_first_page()
1086 imgp->firstpage = NULL; in exec_unmap_first_page()
1124 exec_new_vmspace(struct image_params *imgp, struct sysentvec *sv) in exec_new_vmspace() argument
1127 struct proc *p = imgp->proc; in exec_new_vmspace()
1133 imgp->vmspace_destroyed = true; in exec_new_vmspace()
1134 imgp->sysent = sv; in exec_new_vmspace()
1140 EVENTHANDLER_DIRECT_INVOKE(process_exec, p, imgp); in exec_new_vmspace()
1175 map->flags |= imgp->map_flags; in exec_new_vmspace()
1177 return (sv->sv_onexec != NULL ? sv->sv_onexec(p, imgp) : 0); in exec_new_vmspace()
1185 exec_map_stack(struct image_params *imgp) in exec_map_stack() argument
1199 p = imgp->proc; in exec_map_stack()
1202 if (imgp->stack_sz != 0) { in exec_map_stack()
1203 ssiz = trunc_page(imgp->stack_sz); in exec_map_stack()
1222 stack_prot = sv->sv_shared_page_obj != NULL && imgp->stack_prot != 0 ? in exec_map_stack()
1223 imgp->stack_prot : sv->sv_stackprot; in exec_map_stack()
1265 if ((imgp->imgp_flags & IMGP_ASLR_SHARED_PAGE) != 0) { in exec_map_stack()
1653 exec_copyout_strings(struct image_params *imgp, uintptr_t *stack_base) in exec_copyout_strings() argument
1666 p = imgp->proc; in exec_copyout_strings()
1670 arginfo = imgp->ps_strings = (void *)destp; in exec_copyout_strings()
1687 if (imgp->execpath != NULL && imgp->auxargs != NULL) { in exec_copyout_strings()
1688 execpath_len = strlen(imgp->execpath) + 1; in exec_copyout_strings()
1691 imgp->execpathp = (void *)destp; in exec_copyout_strings()
1692 error = copyout(imgp->execpath, imgp->execpathp, execpath_len); in exec_copyout_strings()
1702 imgp->canary = (void *)destp; in exec_copyout_strings()
1703 error = copyout(canary, imgp->canary, sizeof(canary)); in exec_copyout_strings()
1706 imgp->canarylen = sizeof(canary); in exec_copyout_strings()
1711 imgp->pagesizeslen = sizeof(pagesizes[0]) * MAXPAGESIZES; in exec_copyout_strings()
1712 destp -= imgp->pagesizeslen; in exec_copyout_strings()
1714 imgp->pagesizes = (void *)destp; in exec_copyout_strings()
1715 error = copyout(pagesizes, imgp->pagesizes, imgp->pagesizeslen); in exec_copyout_strings()
1722 destp -= ARG_MAX - imgp->args->stringspace; in exec_copyout_strings()
1726 if (imgp->auxargs) { in exec_copyout_strings()
1741 vectp -= imgp->args->argc + 1 + imgp->args->envc + 1; in exec_copyout_strings()
1748 stringp = imgp->args->begin_argv; in exec_copyout_strings()
1749 argc = imgp->args->argc; in exec_copyout_strings()
1750 envc = imgp->args->envc; in exec_copyout_strings()
1756 ARG_MAX - imgp->args->stringspace); in exec_copyout_strings()
1763 imgp->argv = vectp; in exec_copyout_strings()
1783 imgp->envv = vectp; in exec_copyout_strings()
1803 if (imgp->auxargs) { in exec_copyout_strings()
1805 error = imgp->sysent->sv_copyout_auxargs(imgp, in exec_copyout_strings()
1820 exec_check_permissions(struct image_params *imgp) in exec_check_permissions() argument
1822 struct vnode *vp = imgp->vp; in exec_check_permissions()
1823 struct vattr *attr = imgp->attr; in exec_check_permissions()
1835 error = mac_vnode_check_exec(td->td_ucred, imgp->vp, imgp); in exec_check_permissions()
1879 imgp->textset = true; in exec_check_permissions()
1887 imgp->opened = true; in exec_check_permissions()