Lines Matching refs:imgp
376 execve_nosetid(struct image_params *imgp) in execve_nosetid() argument
378 imgp->credential_setid = false; in execve_nosetid()
379 if (imgp->newcred != NULL) { in execve_nosetid()
380 crfree(imgp->newcred); in execve_nosetid()
381 imgp->newcred = NULL; in execve_nosetid()
398 struct image_params image_params, *imgp; in do_execve() local
422 imgp = &image_params; in do_execve()
446 bzero(imgp, sizeof(*imgp)); in do_execve()
447 imgp->proc = p; in do_execve()
448 imgp->attr = &attr; in do_execve()
449 imgp->args = args; in do_execve()
456 error = mac_execve_enter(imgp, mac_p); in do_execve()
499 imgp->vp = newtextvp; in do_execve()
505 imgp->execpath = args->fname; in do_execve()
507 VOP_UNLOCK(imgp->vp); in do_execve()
510 newbinname, nd.ni_cnd.cn_namelen, &imgp->execpath, in do_execve()
511 &imgp->freepath, &freepath_size) != 0) in do_execve()
512 imgp->execpath = args->fname; in do_execve()
513 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
515 } else if (imgp->interpreter_vp) { in do_execve()
519 newtextvp = imgp->interpreter_vp; in do_execve()
520 imgp->interpreter_vp = NULL; in do_execve()
521 if (vn_fullpath(newtextvp, &imgp->execpath, in do_execve()
522 &imgp->freepath) != 0) in do_execve()
523 imgp->execpath = args->fname; in do_execve()
526 imgp->vp = newtextvp; in do_execve()
543 if (vn_fullpath(newtextvp, &imgp->execpath, in do_execve()
544 &imgp->freepath) != 0) in do_execve()
545 imgp->execpath = args->fname; in do_execve()
548 imgp->vp = newtextvp; in do_execve()
555 error = exec_check_permissions(imgp); in do_execve()
559 imgp->object = imgp->vp->v_object; in do_execve()
560 if (imgp->object != NULL) in do_execve()
561 vm_object_reference(imgp->object); in do_execve()
563 error = exec_map_first_page(imgp); in do_execve()
567 imgp->proc->p_osrel = 0; in do_execve()
568 imgp->proc->p_fctl0 = 0; in do_execve()
569 imgp->proc->p_elf_brandinfo = NULL; in do_execve()
597 will_transition = mac_vnode_execve_will_transition(oldcred, imgp->vp, in do_execve()
598 interpvplabel, imgp) != 0; in do_execve()
604 imgp->proc->p_pdeathsig = 0; in do_execve()
610 (imgp->vp->v_mount->mnt_flag & MNT_NOSUID) == 0 && in do_execve()
612 imgp->credential_setid = true; in do_execve()
613 VOP_UNLOCK(imgp->vp); in do_execve()
614 imgp->newcred = crdup(oldcred); in do_execve()
617 change_euid(imgp->newcred, euip); in do_execve()
619 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
621 change_egid(imgp->newcred, attr.va_gid); in do_execve()
629 change_svuid(imgp->newcred, imgp->newcred->cr_uid); in do_execve()
630 change_svgid(imgp->newcred, imgp->newcred->cr_gid); in do_execve()
646 VOP_UNLOCK(imgp->vp); in do_execve()
647 imgp->newcred = crdup(oldcred); in do_execve()
648 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
649 change_svuid(imgp->newcred, imgp->newcred->cr_uid); in do_execve()
650 change_svgid(imgp->newcred, imgp->newcred->cr_gid); in do_execve()
664 error = (*execsw[i]->ex_imgact)(imgp); in do_execve()
677 if (imgp->interpreted) { in do_execve()
678 exec_unmap_first_page(imgp); in do_execve()
686 MPASS(imgp->textset); in do_execve()
688 imgp->textset = false; in do_execve()
693 if (imgp->opened) { in do_execve()
695 imgp->opened = false; in do_execve()
698 imgp->vp = newtextvp = NULL; in do_execve()
708 vm_object_deallocate(imgp->object); in do_execve()
709 imgp->object = NULL; in do_execve()
710 execve_nosetid(imgp); in do_execve()
711 imgp->execpath = NULL; in do_execve()
712 free(imgp->freepath, M_TEMP); in do_execve()
713 imgp->freepath = NULL; in do_execve()
715 if (imgp->interpreter_vp) { in do_execve()
718 args->fname = imgp->interpreter_name; in do_execve()
727 VOP_UNLOCK(imgp->vp); in do_execve()
733 imgp->execpath != NULL ? imgp->execpath : "<unresolved>"); in do_execve()
734 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
741 error = (*p->p_sysent->sv_copyout_strings)(imgp, &stack_base); in do_execve()
743 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
750 error = (*p->p_sysent->sv_fixup)(&stack_base, imgp); in do_execve()
752 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
768 i = exec_args_get_begin_envv(imgp->args) - imgp->args->begin_argv; in do_execve()
772 bcopy(imgp->args->begin_argv, newargs->ar_args, i); in do_execve()
787 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
828 if ((imgp->sysent->sv_setid_allowed != NULL && in do_execve()
829 !(*imgp->sysent->sv_setid_allowed)(td, imgp)) || in do_execve()
831 execve_nosetid(imgp); in do_execve()
836 if (imgp->credential_setid) { in do_execve()
854 VOP_UNLOCK(imgp->vp); in do_execve()
857 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
863 mac_vnode_execve_transition(oldcred, imgp->newcred, in do_execve()
864 imgp->vp, interpvplabel, imgp); in do_execve()
875 if (imgp->newcred != NULL) { in do_execve()
876 proc_set_cred(p, imgp->newcred); in do_execve()
931 VOP_UNLOCK(imgp->vp); in do_execve()
933 pe.pm_baseaddr = imgp->reloc_base; in do_execve()
934 pe.pm_dynaddr = imgp->et_dyn_addr; in do_execve()
937 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in do_execve()
942 (*p->p_sysent->sv_setregs)(td, imgp, stack_base); in do_execve()
944 VOP_MMAPPED(imgp->vp); in do_execve()
955 if (imgp->firstpage != NULL) in do_execve()
956 exec_unmap_first_page(imgp); in do_execve()
958 if (imgp->vp != NULL) { in do_execve()
959 if (imgp->opened) in do_execve()
960 VOP_CLOSE(imgp->vp, FREAD, td->td_ucred, td); in do_execve()
961 if (imgp->textset) in do_execve()
962 VOP_UNSET_TEXT_CHECKED(imgp->vp); in do_execve()
964 vput(imgp->vp); in do_execve()
966 VOP_UNLOCK(imgp->vp); in do_execve()
974 if (imgp->object != NULL) in do_execve()
975 vm_object_deallocate(imgp->object); in do_execve()
977 free(imgp->freepath, M_TEMP); in do_execve()
996 if (imgp->newcred != NULL && oldcred != NULL) in do_execve()
997 crfree(imgp->newcred); in do_execve()
1000 mac_execve_exit(imgp); in do_execve()
1023 if (error && imgp->vmspace_destroyed) { in do_execve()
1056 exec_map_first_page(struct image_params *imgp) in exec_map_first_page() argument
1062 if (imgp->firstpage != NULL) in exec_map_first_page()
1063 exec_unmap_first_page(imgp); in exec_map_first_page()
1065 object = imgp->vp->v_object; in exec_map_first_page()
1081 imgp->firstpage = sf_buf_alloc(m, 0); in exec_map_first_page()
1082 imgp->image_header = (char *)sf_buf_kva(imgp->firstpage); in exec_map_first_page()
1088 exec_unmap_first_page(struct image_params *imgp) in exec_unmap_first_page() argument
1092 if (imgp->firstpage != NULL) { in exec_unmap_first_page()
1093 m = sf_buf_page(imgp->firstpage); in exec_unmap_first_page()
1094 sf_buf_free(imgp->firstpage); in exec_unmap_first_page()
1095 imgp->firstpage = NULL; in exec_unmap_first_page()
1133 exec_new_vmspace(struct image_params *imgp, struct sysentvec *sv) in exec_new_vmspace() argument
1136 struct proc *p = imgp->proc; in exec_new_vmspace()
1142 imgp->vmspace_destroyed = true; in exec_new_vmspace()
1143 imgp->sysent = sv; in exec_new_vmspace()
1149 EVENTHANDLER_DIRECT_INVOKE(process_exec, p, imgp); in exec_new_vmspace()
1184 map->flags |= imgp->map_flags; in exec_new_vmspace()
1186 return (sv->sv_onexec != NULL ? sv->sv_onexec(p, imgp) : 0); in exec_new_vmspace()
1194 exec_map_stack(struct image_params *imgp) in exec_map_stack() argument
1208 p = imgp->proc; in exec_map_stack()
1211 if (imgp->stack_sz != 0) { in exec_map_stack()
1212 ssiz = trunc_page(imgp->stack_sz); in exec_map_stack()
1231 stack_prot = sv->sv_shared_page_obj != NULL && imgp->stack_prot != 0 ? in exec_map_stack()
1232 imgp->stack_prot : sv->sv_stackprot; in exec_map_stack()
1274 if ((imgp->imgp_flags & IMGP_ASLR_SHARED_PAGE) != 0) { in exec_map_stack()
1662 exec_copyout_strings(struct image_params *imgp, uintptr_t *stack_base) in exec_copyout_strings() argument
1675 p = imgp->proc; in exec_copyout_strings()
1679 arginfo = imgp->ps_strings = (void *)destp; in exec_copyout_strings()
1696 if (imgp->execpath != NULL && imgp->auxargs != NULL) { in exec_copyout_strings()
1697 execpath_len = strlen(imgp->execpath) + 1; in exec_copyout_strings()
1700 imgp->execpathp = (void *)destp; in exec_copyout_strings()
1701 error = copyout(imgp->execpath, imgp->execpathp, execpath_len); in exec_copyout_strings()
1711 imgp->canary = (void *)destp; in exec_copyout_strings()
1712 error = copyout(canary, imgp->canary, sizeof(canary)); in exec_copyout_strings()
1715 imgp->canarylen = sizeof(canary); in exec_copyout_strings()
1720 imgp->pagesizeslen = sizeof(pagesizes[0]) * MAXPAGESIZES; in exec_copyout_strings()
1721 destp -= imgp->pagesizeslen; in exec_copyout_strings()
1723 imgp->pagesizes = (void *)destp; in exec_copyout_strings()
1724 error = copyout(pagesizes, imgp->pagesizes, imgp->pagesizeslen); in exec_copyout_strings()
1731 destp -= ARG_MAX - imgp->args->stringspace; in exec_copyout_strings()
1735 if (imgp->auxargs) { in exec_copyout_strings()
1750 vectp -= imgp->args->argc + 1 + imgp->args->envc + 1; in exec_copyout_strings()
1757 stringp = imgp->args->begin_argv; in exec_copyout_strings()
1758 argc = imgp->args->argc; in exec_copyout_strings()
1759 envc = imgp->args->envc; in exec_copyout_strings()
1765 ARG_MAX - imgp->args->stringspace); in exec_copyout_strings()
1772 imgp->argv = vectp; in exec_copyout_strings()
1792 imgp->envv = vectp; in exec_copyout_strings()
1812 if (imgp->auxargs) { in exec_copyout_strings()
1814 error = imgp->sysent->sv_copyout_auxargs(imgp, in exec_copyout_strings()
1829 exec_check_permissions(struct image_params *imgp) in exec_check_permissions() argument
1831 struct vnode *vp = imgp->vp; in exec_check_permissions()
1832 struct vattr *attr = imgp->attr; in exec_check_permissions()
1844 error = mac_vnode_check_exec(td->td_ucred, imgp->vp, imgp); in exec_check_permissions()
1888 imgp->textset = true; in exec_check_permissions()
1896 imgp->opened = true; in exec_check_permissions()