Lines Matching defs:imgp

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