Home | History | Annotate | Download | only in kern

Lines Matching defs:epp

124 #define	MD_TOPDOWN_INIT(epp)	(epp)->ep_flags |= EXEC_TOPDOWN_VM
126 #define MD_TOPDOWN_INIT(epp)
322 exec_resolvename(struct lwp *l, struct exec_package *epp, struct vnode *vp,
334 __func__, epp->ep_kname, error));
339 epp->ep_resolvedname = *rpath;
341 epp->ep_kname = p + 1;
373 check_exec(struct lwp *l, struct exec_package *epp, struct pathbuf *pb,
380 if (epp->ep_resolvedname) {
384 pathbuf_copystring(pb, epp->ep_resolvedname, PATH_MAX);
391 epp->ep_vp = vp = nd.ni_vp;
399 if ((error = fd_getvnode(epp->ep_xfd, &fp)) != 0)
401 epp->ep_vp = vp = fp->f_vnode;
403 fd_putfile(epp->ep_xfd);
404 if ((error = exec_resolvename(l, epp, vp, rpath)) != 0)
419 if ((error = VOP_GETATTR(vp, epp->ep_vap, l->l_cred)) != 0)
428 epp->ep_vap->va_mode &= ~(S_ISUID | S_ISGID);
435 error = vn_rdwr(UIO_READ, vp, epp->ep_hdr, epp->ep_hdrlen, 0,
445 epp->ep_resolvedname ? epp->ep_resolvedname : epp->ep_kname,
446 epp->ep_flags & EXEC_INDIR ? VERIEXEC_INDIRECT : VERIEXEC_DIRECT,
453 error = pax_segvguard(l, vp, epp->ep_resolvedname, false);
458 epp->ep_hdrvalid = epp->ep_hdrlen - resid;
464 epp->ep_vm_minaddr = exec_vm_minaddr(VM_MIN_ADDRESS);
465 epp->ep_vm_maxaddr = VM_MAXUSER_ADDRESS;
475 epp->ep_esch = execsw[i];
476 newerror = (*execsw[i]->es_makecmds)(l, epp);
480 if (epp->ep_entry >= epp->ep_vm_maxaddr) {
484 __func__, (void *)epp->ep_entry,
485 (void *)epp->ep_vm_maxaddr);
491 if (epp->ep_entry < epp->ep_vm_minaddr) {
495 __func__, (void *)epp->ep_entry,
496 (void *)epp->ep_vm_minaddr);
507 if (epp->ep_tsize > MAXTSIZ) {
510 (uintmax_t)epp->ep_tsize,
519 if (epp->ep_dsize > dlimit) {
522 (uintmax_t)epp->ep_dsize,
535 KASSERT(epp->ep_emul_arg == NULL);
536 if (epp->ep_emul_root != NULL) {
537 vrele(epp->ep_emul_root);
538 epp->ep_emul_root = NULL;
540 if (epp->ep_interp != NULL) {
541 vrele(epp->ep_interp);
542 epp->ep_interp = NULL;
544 epp->ep_pax_flags = 0;
550 if (epp->ep_flags & EXEC_DESTR)
561 kill_vmcmds(&epp->ep_vmcmds);
753 struct exec_package * const epp = &data->ed_pack;
813 epp->ep_kname = data->ed_pathstring + offs;
815 epp->ep_resolvedname = data->ed_resolvedname;
816 epp->ep_xfd = -1;
820 epp->ep_kname = "*fexecve*";
822 epp->ep_resolvedname = NULL;
823 epp->ep_xfd = fd;
830 epp->ep_hdr = kmem_alloc(exec_maxhdrsz, KM_SLEEP);
831 epp->ep_hdrlen = exec_maxhdrsz;
832 epp->ep_hdrvalid = 0;
833 epp->ep_emul_arg = NULL;
834 epp->ep_emul_arg_free = NULL;
835 memset(&epp->ep_vmcmds, 0, sizeof(epp->ep_vmcmds));
836 epp->ep_vap = &data->ed_attr;
837 epp->ep_flags = (p->p_flag & PK_32) ? EXEC_FROM32 : 0;
838 MD_TOPDOWN_INIT(epp);
839 epp->ep_emul_root = NULL;
840 epp->ep_interp = NULL;
841 epp->ep_esch = NULL;
842 epp->ep_pax_flags = 0;
843 memset(epp->ep_machine_arch, 0, sizeof(epp->ep_machine_arch));
848 if ((error = check_exec(l, epp, data->ed_pathbuf,
852 __func__, epp->ep_kname, error));
885 const size_t len = calcstack(data, pax_aslr_stack_gap(epp) + RTLD_GAP);
887 if (len > epp->ep_ssize) {
894 epp->ep_ssize = len;
900 kill_vmcmds(&epp->ep_vmcmds);
902 if (epp->ep_flags & EXEC_HASFD) {
903 epp->ep_flags &= ~EXEC_HASFD;
904 fd_close(epp->ep_fd);
907 vn_lock(epp->ep_vp, LK_EXCLUSIVE | LK_RETRY);
908 VOP_CLOSE(epp->ep_vp, FREAD, l->l_cred);
909 vput(epp->ep_vp);
913 kmem_free(epp->ep_hdr, epp->ep_hdrlen);
914 if (epp->ep_emul_root != NULL)
915 vrele(epp->ep_emul_root);
916 if (epp->ep_interp != NULL)
917 vrele(epp->ep_interp);
939 struct exec_package * const epp = &data->ed_pack;
948 vref(epp->ep_vp);
949 p->p_textvp = epp->ep_vp;
952 KASSERTMSG(epp->ep_vmcmds.evs_used != 0, "%s: no vmcmds", __func__);
955 DUMPVMCMDS(epp, 0, 0);
960 for (i = 0; i < epp->ep_vmcmds.evs_used && !error; i++) {
963 vcp = &epp->ep_vmcmds.evs_cmds[i];
973 DUMPVMCMDS(epp, i, error);
979 kill_vmcmds(&epp->ep_vmcmds);
981 vn_lock(epp->ep_vp, LK_EXCLUSIVE | LK_RETRY);
982 VOP_CLOSE(epp->ep_vp, FREAD, l->l_cred);
983 vput(epp->ep_vp);
995 struct exec_package * const epp = &data->ed_pack;
998 kill_vmcmds(&epp->ep_vmcmds);
1000 if (epp->ep_flags & EXEC_HASFD) {
1001 epp->ep_flags &= ~EXEC_HASFD;
1002 fd_close(epp->ep_fd);
1006 vn_lock(epp->ep_vp, LK_EXCLUSIVE | LK_RETRY);
1007 VOP_CLOSE(epp->ep_vp, FREAD, curlwp->l_cred);
1008 vput(epp->ep_vp);
1011 kmem_free(epp->ep_hdr, epp->ep_hdrlen);
1012 if (epp->ep_emul_root != NULL)
1013 vrele(epp->ep_emul_root);
1014 if (epp->ep_interp != NULL)
1015 vrele(epp->ep_interp);
1135 emulexec(struct lwp *l, struct exec_package *epp)
1141 if (epp->ep_esch->es_emul->e_path != NULL &&
1142 epp->ep_emul_root == NULL)
1143 emul_find_root(l, epp);
1147 p->p_cwdi->cwdi_edir = epp->ep_emul_root;
1149 epp->ep_emul_root = NULL;
1150 if (epp->ep_interp != NULL)
1151 vrele(epp->ep_interp);
1164 && p->p_emul != epp->ep_esch->es_emul)
1171 if (epp->ep_esch->es_emul->e_proc_exec)
1172 (*epp->ep_esch->es_emul->e_proc_exec)(p, epp);
1175 p->p_emul = epp->ep_esch->es_emul;
1178 p->p_execsw = epp->ep_esch;
1190 struct exec_package * const epp = &data->ed_pack;
1237 pax_set_flags(epp, p);
1248 uvmspace_exec(l, epp->ep_vm_minaddr, epp->ep_vm_maxaddr,
1249 epp->ep_flags & EXEC_TOPDOWN_VM);
1252 vm->vm_taddr = (void *)epp->ep_taddr;
1253 vm->vm_tsize = btoc(epp->ep_tsize);
1254 vm->vm_daddr = (void*)epp->ep_daddr;
1255 vm->vm_dsize = btoc(epp->ep_dsize);
1256 vm->vm_ssize = btoc(epp->ep_ssize);
1258 vm->vm_maxsaddr = (void *)epp->ep_maxsaddr;
1259 vm->vm_minsaddr = (void *)epp->ep_minsaddr;
1261 pax_aslr_init_vm(l, vm, epp);
1333 pathexec(p, epp->ep_resolvedname);
1335 char * const newstack = STACK_GROW(vm->vm_minsaddr, epp->ep_ssize);
1352 (*epp->ep_esch->es_emul->e_setregs)(l, epp, (vaddr_t)newstack);
1353 if (epp->ep_esch->es_setregs)
1354 (*epp->ep_esch->es_setregs)(l, epp, (vaddr_t)newstack);
1363 if ((error = exec_sigcode_map(p, epp->ep_esch->es_emul)) != 0) {
1382 kmem_free(epp->ep_hdr, epp->ep_hdrlen);
1384 SDT_PROBE(proc, kernel, , exec__success, epp->ep_kname, 0, 0, 0, 0);
1386 emulexec(l, epp);
1450 exec_free_emul_arg(epp);
1452 kmem_free(epp->ep_hdr, epp->ep_hdrlen);
1453 if (epp->ep_emul_root != NULL)
1454 vrele(epp->ep_emul_root);
1455 if (epp->ep_interp != NULL)
1456 vrele(epp->ep_interp);
1484 fromptrsz(const struct exec_package *epp)
1486 return (epp->ep_flags & EXEC_FROM32) ? sizeof(int) : sizeof(char *);
1490 ptrsz(const struct exec_package *epp)
1492 return (epp->ep_flags & EXEC_32) ? sizeof(int) : sizeof(char *);
1498 struct exec_package * const epp = &data->ed_pack;
1507 return (nargenvptrs * ptrsz(epp)) /* pointers */
1509 + epp->ep_esch->es_arglen; /* auxinfo */
1515 struct exec_package * const epp = &data->ed_pack;
1517 data->ed_szsigcode = epp->ep_esch->es_emul->e_esigcode -
1518 epp->ep_esch->es_emul->e_sigcode;
1520 data->ed_ps_strings_sz = (epp->ep_flags & EXEC_32) ?
1541 struct exec_package * const epp = &data->ed_pack;
1561 error = (*epp->ep_esch->es_copyargs)(l, epp,
1579 struct exec_package * const epp = &data->ed_pack;
1585 p->p_psstrp = (vaddr_t)STACK_ALLOC(STACK_GROW(epp->ep_minsaddr,
1588 if (epp->ep_flags & EXEC_32) {
1612 struct exec_package * const epp = &data->ed_pack;
1622 if (epp->ep_flags & EXEC_HASARGL) {
1623 struct exec_fakearg *fa = epp->ep_fa;
1638 kmem_free(epp->ep_fa, epp->ep_fa_len);
1639 epp->ep_flags &= ~EXEC_HASARGL;
1649 kmem_free(epp->ep_fa, epp->ep_fa_len);
1650 epp->ep_flags &= ~EXEC_HASARGL;
1661 if (epp->ep_flags & EXEC_SKIPARG)
1662 args = (const void *)((const char *)args + fromptrsz(epp));
2951 exec_free_emul_arg(struct exec_package *epp)
2953 if (epp->ep_emul_arg_free != NULL) {
2954 KASSERT(epp->ep_emul_arg != NULL);
2955 (*epp->ep_emul_arg_free)(epp->ep_emul_arg);
2956 epp->ep_emul_arg_free = NULL;
2957 epp->ep_emul_arg = NULL;
2959 KASSERT(epp->ep_emul_arg == NULL);
2965 dump_vmcmds(const struct exec_package * const epp, size_t x, int error)
2967 struct exec_vmcmd *vp = &epp->ep_vmcmds.evs_cmds[0];
2971 DPRINTF(("vmcmds %u\n", epp->ep_vmcmds.evs_used));
2974 epp->ep_vmcmds.evs_used, error));
2976 for (j = 0; j < epp->ep_vmcmds.evs_used; j++) {