Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/linux/linux_sysvec.c
Show First 20 Lines • Show All 259 Lines • ▼ Show 20 Lines | linux_copyout_auxargs(struct image_params *imgp, uintptr_t base) | ||||
args = (Elf64_Auxargs *)imgp->auxargs; | args = (Elf64_Auxargs *)imgp->auxargs; | ||||
argarray = pos = malloc(LINUX_AT_COUNT * sizeof(*pos), M_TEMP, | argarray = pos = malloc(LINUX_AT_COUNT * sizeof(*pos), M_TEMP, | ||||
M_WAITOK | M_ZERO); | M_WAITOK | M_ZERO); | ||||
issetugid = p->p_flag & P_SUGID ? 1 : 0; | issetugid = p->p_flag & P_SUGID ? 1 : 0; | ||||
AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO_EHDR, | AUXARGS_ENTRY(pos, LINUX_AT_SYSINFO_EHDR, | ||||
imgp->proc->p_sysent->sv_shared_page_base); | imgp->proc->p_sysent->sv_shared_page_base); | ||||
AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature); | AUXARGS_ENTRY(pos, LINUX_AT_HWCAP, cpu_feature); | ||||
AUXARGS_ENTRY(pos, AT_PAGESZ, args->pagesz); | |||||
AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, stclohz); | AUXARGS_ENTRY(pos, LINUX_AT_CLKTCK, stclohz); | ||||
AUXARGS_ENTRY(pos, AT_PHDR, args->phdr); | AUXARGS_ENTRY(pos, AT_PHDR, args->phdr); | ||||
AUXARGS_ENTRY(pos, AT_PHENT, args->phent); | AUXARGS_ENTRY(pos, AT_PHENT, args->phent); | ||||
AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum); | AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum); | ||||
AUXARGS_ENTRY(pos, AT_PAGESZ, args->pagesz); | |||||
AUXARGS_ENTRY(pos, AT_BASE, args->base); | AUXARGS_ENTRY(pos, AT_BASE, args->base); | ||||
AUXARGS_ENTRY(pos, AT_FLAGS, args->flags); | AUXARGS_ENTRY(pos, AT_FLAGS, args->flags); | ||||
AUXARGS_ENTRY(pos, AT_ENTRY, args->entry); | AUXARGS_ENTRY(pos, AT_ENTRY, args->entry); | ||||
AUXARGS_ENTRY(pos, AT_UID, imgp->proc->p_ucred->cr_ruid); | AUXARGS_ENTRY(pos, AT_UID, imgp->proc->p_ucred->cr_ruid); | ||||
AUXARGS_ENTRY(pos, AT_EUID, imgp->proc->p_ucred->cr_svuid); | AUXARGS_ENTRY(pos, AT_EUID, imgp->proc->p_ucred->cr_svuid); | ||||
AUXARGS_ENTRY(pos, AT_GID, imgp->proc->p_ucred->cr_rgid); | AUXARGS_ENTRY(pos, AT_GID, imgp->proc->p_ucred->cr_rgid); | ||||
AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid); | AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid); | ||||
AUXARGS_ENTRY(pos, LINUX_AT_SECURE, issetugid); | AUXARGS_ENTRY(pos, LINUX_AT_SECURE, issetugid); | ||||
AUXARGS_ENTRY(pos, LINUX_AT_PLATFORM, PTROUT(linux_platform)); | |||||
AUXARGS_ENTRY_PTR(pos, LINUX_AT_RANDOM, imgp->canary); | AUXARGS_ENTRY_PTR(pos, LINUX_AT_RANDOM, imgp->canary); | ||||
AUXARGS_ENTRY(pos, LINUX_AT_HWCAP2, 0); | |||||
if (imgp->execpathp != 0) | if (imgp->execpathp != 0) | ||||
AUXARGS_ENTRY_PTR(pos, LINUX_AT_EXECFN, imgp->execpathp); | AUXARGS_ENTRY_PTR(pos, LINUX_AT_EXECFN, imgp->execpathp); | ||||
if (args->execfd != -1) | if (args->execfd != -1) | ||||
AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd); | AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd); | ||||
AUXARGS_ENTRY(pos, LINUX_AT_PLATFORM, PTROUT(linux_platform)); | |||||
AUXARGS_ENTRY(pos, AT_NULL, 0); | AUXARGS_ENTRY(pos, AT_NULL, 0); | ||||
free(imgp->auxargs, M_TEMP); | free(imgp->auxargs, M_TEMP); | ||||
imgp->auxargs = NULL; | imgp->auxargs = NULL; | ||||
KASSERT(pos - argarray <= LINUX_AT_COUNT, ("Too many auxargs")); | KASSERT(pos - argarray <= LINUX_AT_COUNT, ("Too many auxargs")); | ||||
error = copyout(argarray, (void *)base, | error = copyout(argarray, (void *)base, | ||||
sizeof(*argarray) * LINUX_AT_COUNT); | sizeof(*argarray) * LINUX_AT_COUNT); | ||||
▲ Show 20 Lines • Show All 648 Lines • Show Last 20 Lines |