Lines Matching refs:imgp

88 static Elf_Brandinfo *__elfN(get_brandinfo)(struct image_params *imgp,
92 static int __elfN(load_section)(const struct image_params *imgp,
95 static int __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp);
99 static bool __elfN(check_note)(struct image_params *imgp,
338 __elfN(get_brandinfo)(struct image_params *imgp, const char *interp, in __elfN()
341 const Elf_Ehdr *hdr = (const Elf_Ehdr *)imgp->image_header; in __elfN()
368 ret = __elfN(check_note)(imgp, bi->brand_note, osrel, in __elfN()
372 ret = bi->header_supported(imgp, osrel, in __elfN()
413 bi->header_supported(imgp, NULL, NULL)) { in __elfN()
441 ret = bi->header_supported(imgp, NULL, NULL); in __elfN()
461 bi->header_supported(imgp, NULL, NULL))) in __elfN()
475 bi->header_supported(imgp, NULL, NULL))) in __elfN()
550 __elfN(map_insert)(const struct image_params *imgp, vm_map_t map, in __elfN()
608 locked = VOP_ISLOCKED(imgp->vp); in __elfN()
609 VOP_UNLOCK(imgp->vp); in __elfN()
611 vn_lock(imgp->vp, locked | LK_RETRY); in __elfN()
614 MPASS(imgp->vp->v_object == object); in __elfN()
615 VOP_SET_TEXT_CHECKED(imgp->vp); in __elfN()
622 __elfN(load_section)(const struct image_params *imgp, vm_ooffset_t offset, in __elfN()
643 if ((filsz != 0 && (off_t)filsz + offset > imgp->attr->va_size) || in __elfN()
649 object = imgp->object; in __elfN()
650 map = &imgp->proc->p_vmspace->vm_map; in __elfN()
672 rv = __elfN(map_insert)(imgp, map, object, file_addr, in __elfN()
695 rv = __elfN(map_insert)(imgp, map, NULL, 0, map_addr, in __elfN()
726 __elfN(load_sections)(const struct image_params *imgp, const Elf_Ehdr *hdr, in __elfN()
734 ASSERT_VOP_LOCKED(imgp->vp, __func__); in __elfN()
745 error = __elfN(load_section)(imgp, phdr[i].p_offset, in __elfN()
791 struct image_params *imgp; in __elfN() local
808 imgp = &tempdata->image_params; in __elfN()
813 imgp->proc = p; in __elfN()
814 imgp->attr = attr; in __elfN()
823 imgp->vp = nd->ni_vp; in __elfN()
828 error = exec_check_permissions(imgp); in __elfN()
832 error = exec_map_first_page(imgp); in __elfN()
836 imgp->object = nd->ni_vp->v_object; in __elfN()
838 hdr = (const Elf_Ehdr *)imgp->image_header; in __elfN()
856 phdr = (const Elf_Phdr *)(imgp->image_header + hdr->e_phoff); in __elfN()
862 error = __elfN(load_sections)(imgp, hdr, phdr, rbase, &base_addr); in __elfN()
867 p->p_sysent->sv_protect(imgp, SVP_INTERP); in __elfN()
873 if (imgp->firstpage) in __elfN()
874 exec_unmap_first_page(imgp); in __elfN()
877 if (imgp->textset) in __elfN()
927 __elfN(enforce_limits)(struct image_params *imgp, const Elf_Ehdr *hdr, in __elfN()
943 seg_addr = trunc_page(phdr[i].p_vaddr + imgp->et_dyn_addr); in __elfN()
945 phdr[i].p_vaddr + imgp->et_dyn_addr - seg_addr); in __elfN()
977 PROC_LOCK(imgp->proc); in __elfN()
978 if (data_size > lim_cur_proc(imgp->proc, RLIMIT_DATA)) in __elfN()
982 else if (total_size > lim_cur_proc(imgp->proc, RLIMIT_VMEM)) in __elfN()
984 else if (racct_set(imgp->proc, RACCT_DATA, data_size) != 0) in __elfN()
986 else if (racct_set(imgp->proc, RACCT_VMEM, total_size) != 0) in __elfN()
988 PROC_UNLOCK(imgp->proc); in __elfN()
994 vmspace = imgp->proc->p_vmspace; in __elfN()
1004 __elfN(get_interp)(struct image_params *imgp, const Elf_Phdr *phdr, in __elfN()
1013 ASSERT_VOP_LOCKED(imgp->vp, __func__); in __elfN()
1037 VOP_UNLOCK(imgp->vp); in __elfN()
1039 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in __elfN()
1042 error = vn_rdwr(UIO_READ, imgp->vp, interp, in __elfN()
1058 interp = __DECONST(char *, imgp->image_header) + phdr->p_offset; in __elfN()
1070 __elfN(load_interp)(struct image_params *imgp, const Elf_Brandinfo *brand_info, in __elfN()
1078 error = __elfN(load_file)(imgp->proc, in __elfN()
1084 error = __elfN(load_file)(imgp->proc, interp, addr, entry); in __elfN()
1099 __CONCAT(exec_, __elfN(imgact))(struct image_params *imgp) in __CONCAT()
1117 hdr = (const Elf_Ehdr *)imgp->image_header; in __CONCAT()
1138 phdr = (const Elf_Phdr *)(imgp->image_header + hdr->e_phoff); in __CONCAT()
1209 error = __elfN(get_interp)(imgp, &phdr[i], &interp, in __CONCAT()
1216 imgp->stack_prot = in __CONCAT()
1218 if ((imgp->stack_prot & VM_PROT_RW) != in __CONCAT()
1225 imgp->stack_sz = phdr[i].p_memsz; in __CONCAT()
1233 brand_info = __elfN(get_brandinfo)(imgp, interp, &osrel, &fctl0); in __CONCAT()
1254 imgp->et_dyn_addr = __elfN(pie_base); in __CONCAT()
1256 (imgp->proc->p_flag2 & P2_ASLR_DISABLE) == 0) || in __CONCAT()
1257 (imgp->proc->p_flag2 & P2_ASLR_ENABLE) != 0) in __CONCAT()
1258 imgp->et_dyn_addr = ET_DYN_ADDR_RAND; in __CONCAT()
1260 imgp->et_dyn_addr = __elfN(pie_base); in __CONCAT()
1275 VOP_UNLOCK(imgp->vp); in __CONCAT()
1284 if (imgp->credential_setid) { in __CONCAT()
1285 PROC_LOCK(imgp->proc); in __CONCAT()
1286 imgp->proc->p_flag2 &= ~(P2_ASLR_ENABLE | P2_ASLR_DISABLE | in __CONCAT()
1288 PROC_UNLOCK(imgp->proc); in __CONCAT()
1291 (imgp->proc->p_flag2 & P2_ASLR_DISABLE) != 0 || in __CONCAT()
1293 KASSERT(imgp->et_dyn_addr != ET_DYN_ADDR_RAND, in __CONCAT()
1295 } else if ((imgp->proc->p_flag2 & P2_ASLR_ENABLE) != 0 || in __CONCAT()
1297 imgp->et_dyn_addr == ET_DYN_ADDR_RAND) { in __CONCAT()
1298 imgp->map_flags |= MAP_ASLR; in __CONCAT()
1306 (imgp->proc->p_flag2 & P2_ASLR_IGNSTART) != 0) in __CONCAT()
1307 imgp->map_flags |= MAP_ASLR_IGNSTART; in __CONCAT()
1309 imgp->map_flags |= MAP_ASLR_STACK; in __CONCAT()
1311 imgp->imgp_flags |= IMGP_ASLR_SHARED_PAGE; in __CONCAT()
1315 (imgp->proc->p_flag2 & P2_WXORX_DISABLE) == 0) || in __CONCAT()
1316 (imgp->proc->p_flag2 & P2_WXORX_ENABLE_EXEC) != 0) in __CONCAT()
1317 imgp->map_flags |= MAP_WXORX; in __CONCAT()
1319 error = exec_new_vmspace(imgp, sv); in __CONCAT()
1321 imgp->proc->p_sysent = sv; in __CONCAT()
1322 imgp->proc->p_elf_brandinfo = brand_info; in __CONCAT()
1324 vmspace = imgp->proc->p_vmspace; in __CONCAT()
1327 if ((imgp->map_flags & MAP_ASLR_STACK) == 0) in __CONCAT()
1334 if (error == 0 && imgp->et_dyn_addr == ET_DYN_ADDR_RAND) { in __CONCAT()
1340 maxv / 2, maxalign, &imgp->et_dyn_addr); in __CONCAT()
1343 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in __CONCAT()
1347 error = __elfN(load_sections)(imgp, hdr, phdr, imgp->et_dyn_addr, NULL); in __CONCAT()
1351 error = __elfN(enforce_limits)(imgp, hdr, phdr); in __CONCAT()
1379 entry = (u_long)hdr->e_entry + imgp->et_dyn_addr; in __CONCAT()
1380 imgp->entry_addr = entry; in __CONCAT()
1383 sv->sv_protect(imgp, SVP_IMAGE); in __CONCAT()
1386 VOP_UNLOCK(imgp->vp); in __CONCAT()
1394 error = __elfN(load_interp)(imgp, brand_info, interp, in __CONCAT()
1395 &addr, &imgp->entry_addr); in __CONCAT()
1397 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in __CONCAT()
1401 addr = imgp->et_dyn_addr; in __CONCAT()
1403 error = exec_map_stack(imgp); in __CONCAT()
1412 VOP_UNLOCK(imgp->vp); in __CONCAT()
1414 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in __CONCAT()
1417 elf_auxargs->phdr = proghdr + imgp->et_dyn_addr; in __CONCAT()
1426 imgp->auxargs = elf_auxargs; in __CONCAT()
1427 imgp->interpreted = 0; in __CONCAT()
1428 imgp->reloc_base = addr; in __CONCAT()
1429 imgp->proc->p_osrel = osrel; in __CONCAT()
1430 imgp->proc->p_fctl0 = fctl0; in __CONCAT()
1431 imgp->proc->p_elf_flags = hdr->e_flags; in __CONCAT()
1434 ASSERT_VOP_LOCKED(imgp->vp, "skipped relock"); in __CONCAT()
1443 __elfN(freebsd_copyout_auxargs)(struct image_params *imgp, uintptr_t base) in __elfN()
1445 Elf_Auxargs *args = (Elf_Auxargs *)imgp->auxargs; in __elfN()
1455 vmspace = imgp->proc->p_vmspace; in __elfN()
1467 if (imgp->execpathp != 0) in __elfN()
1468 AUXARGS_ENTRY_PTR(pos, AT_EXECPATH, imgp->execpathp); in __elfN()
1470 imgp->proc->p_ucred->cr_prison->pr_osreldate); in __elfN()
1471 if (imgp->canary != 0) { in __elfN()
1472 AUXARGS_ENTRY_PTR(pos, AT_CANARY, imgp->canary); in __elfN()
1473 AUXARGS_ENTRY(pos, AT_CANARYLEN, imgp->canarylen); in __elfN()
1476 if (imgp->pagesizes != 0) { in __elfN()
1477 AUXARGS_ENTRY_PTR(pos, AT_PAGESIZES, imgp->pagesizes); in __elfN()
1478 AUXARGS_ENTRY(pos, AT_PAGESIZESLEN, imgp->pagesizeslen); in __elfN()
1480 if ((imgp->sysent->sv_flags & SV_TIMEKEEP) != 0) { in __elfN()
1482 vmspace->vm_shp_base + imgp->sysent->sv_timekeep_offset); in __elfN()
1484 AUXARGS_ENTRY(pos, AT_STACKPROT, imgp->sysent->sv_shared_page_obj in __elfN()
1485 != NULL && imgp->stack_prot != 0 ? imgp->stack_prot : in __elfN()
1486 imgp->sysent->sv_stackprot); in __elfN()
1487 if (imgp->sysent->sv_hwcap != NULL) in __elfN()
1488 AUXARGS_ENTRY(pos, AT_HWCAP, *imgp->sysent->sv_hwcap); in __elfN()
1489 if (imgp->sysent->sv_hwcap2 != NULL) in __elfN()
1490 AUXARGS_ENTRY(pos, AT_HWCAP2, *imgp->sysent->sv_hwcap2); in __elfN()
1491 if (imgp->sysent->sv_hwcap3 != NULL) in __elfN()
1492 AUXARGS_ENTRY(pos, AT_HWCAP3, *imgp->sysent->sv_hwcap3); in __elfN()
1493 if (imgp->sysent->sv_hwcap4 != NULL) in __elfN()
1494 AUXARGS_ENTRY(pos, AT_HWCAP4, *imgp->sysent->sv_hwcap4); in __elfN()
1501 AUXARGS_ENTRY(pos, AT_ARGC, imgp->args->argc); in __elfN()
1502 AUXARGS_ENTRY_PTR(pos, AT_ARGV, imgp->argv); in __elfN()
1503 AUXARGS_ENTRY(pos, AT_ENVC, imgp->args->envc); in __elfN()
1504 AUXARGS_ENTRY_PTR(pos, AT_ENVV, imgp->envv); in __elfN()
1505 AUXARGS_ENTRY_PTR(pos, AT_PS_STRINGS, imgp->ps_strings); in __elfN()
1507 if ((imgp->sysent->sv_flags & SV_RNG_SEED_VER) != 0) { in __elfN()
1509 vmspace->vm_shp_base + imgp->sysent->sv_fxrng_gen_offset); in __elfN()
1512 if ((imgp->sysent->sv_flags & SV_DSO_SIG) != 0 && __elfN(vdso) != 0) { in __elfN()
1514 vmspace->vm_shp_base + imgp->sysent->sv_vdso_offset); in __elfN()
1517 stacksz = imgp->proc->p_limit->pl_rlimit[RLIMIT_STACK].rlim_cur; in __elfN()
1521 free(imgp->auxargs, M_TEMP); in __elfN()
1522 imgp->auxargs = NULL; in __elfN()
1531 __elfN(freebsd_fixup)(uintptr_t *stack_base, struct image_params *imgp) in __elfN()
1537 if (elf_suword(base, imgp->args->argc) == -1) in __elfN()
2782 __elfN(parse_notes)(const struct image_params *imgp, const Elf_Note *checknote, in __elfN()
2795 ASSERT_VOP_LOCKED(imgp->vp, "parse_notes"); in __elfN()
2800 VOP_UNLOCK(imgp->vp); in __elfN()
2802 vn_lock(imgp->vp, LK_SHARED | LK_RETRY); in __elfN()
2804 error = vn_rdwr(UIO_READ, imgp->vp, buf, pnote->p_filesz, in __elfN()
2814 note = note0 = (const Elf_Note *)(imgp->image_header + in __elfN()
2816 note_end = (const Elf_Note *)(imgp->image_header + in __elfN()
2915 __elfN(check_note)(struct image_params *imgp, Elf_Brandnote *brandnote, in __elfN()
2924 hdr = (const Elf_Ehdr *)imgp->image_header; in __elfN()
2925 phdr = (const Elf_Phdr *)(imgp->image_header + hdr->e_phoff); in __elfN()
2932 if (phdr[i].p_type == PT_NOTE && __elfN(parse_notes)(imgp, in __elfN()
2937 __elfN(parse_notes)(imgp, &fctl_note, in __elfN()