Changeset View
Changeset View
Standalone View
Standalone View
sys/compat/freebsd32/freebsd32_misc.c
Show First 20 Lines • Show All 3,398 Lines • ▼ Show 20 Lines | freebsd32_copyout_strings(struct image_params *imgp, uintptr_t *stack_base) | ||||
struct freebsd32_ps_strings *arginfo; | struct freebsd32_ps_strings *arginfo; | ||||
char canary[sizeof(long) * 8]; | char canary[sizeof(long) * 8]; | ||||
int32_t pagesizes32[MAXPAGESIZES]; | int32_t pagesizes32[MAXPAGESIZES]; | ||||
size_t execpath_len; | size_t execpath_len; | ||||
int error, szsigcode; | int error, szsigcode; | ||||
sysent = imgp->sysent; | sysent = imgp->sysent; | ||||
arginfo = (struct freebsd32_ps_strings *)sysent->sv_psstrings; | arginfo = (struct freebsd32_ps_strings *)PROC_PS_STRINGS(imgp->proc); | ||||
imgp->ps_strings = arginfo; | imgp->ps_strings = arginfo; | ||||
destp = (uintptr_t)arginfo; | destp = (uintptr_t)arginfo; | ||||
/* | /* | ||||
* Install sigcode. | * Install sigcode. | ||||
*/ | */ | ||||
if (sysent->sv_sigcode_base == 0) { | if (sysent->sv_sigcode_base == 0) { | ||||
szsigcode = *sysent->sv_szsigcode; | szsigcode = *sysent->sv_szsigcode; | ||||
▲ Show 20 Lines • Show All 43 Lines • ▼ Show 20 Lines | freebsd32_copyout_strings(struct image_params *imgp, uintptr_t *stack_base) | ||||
/* | /* | ||||
* Allocate room for the argument and environment strings. | * Allocate room for the argument and environment strings. | ||||
*/ | */ | ||||
destp -= ARG_MAX - imgp->args->stringspace; | destp -= ARG_MAX - imgp->args->stringspace; | ||||
destp = rounddown2(destp, sizeof(uint32_t)); | destp = rounddown2(destp, sizeof(uint32_t)); | ||||
ustringp = destp; | ustringp = destp; | ||||
exec_stackgap(imgp, &destp); | |||||
if (imgp->auxargs) { | if (imgp->auxargs) { | ||||
/* | /* | ||||
* Allocate room on the stack for the ELF auxargs | * Allocate room on the stack for the ELF auxargs | ||||
* array. It has up to AT_COUNT entries. | * array. It has up to AT_COUNT entries. | ||||
*/ | */ | ||||
destp -= AT_COUNT * sizeof(Elf32_Auxinfo); | destp -= AT_COUNT * sizeof(Elf32_Auxinfo); | ||||
destp = rounddown2(destp, sizeof(uint32_t)); | destp = rounddown2(destp, sizeof(uint32_t)); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 174 Lines • ▼ Show 20 Lines | freebsd32_procctl(struct thread *td, struct freebsd32_procctl_args *uap) | ||||
if (uap->com >= PROC_PROCCTL_MD_MIN) | if (uap->com >= PROC_PROCCTL_MD_MIN) | ||||
return (cpu_procctl(td, uap->idtype, PAIR32TO64(id_t, uap->id), | return (cpu_procctl(td, uap->idtype, PAIR32TO64(id_t, uap->id), | ||||
uap->com, PTRIN(uap->data))); | uap->com, PTRIN(uap->data))); | ||||
switch (uap->com) { | switch (uap->com) { | ||||
case PROC_ASLR_CTL: | case PROC_ASLR_CTL: | ||||
case PROC_PROTMAX_CTL: | case PROC_PROTMAX_CTL: | ||||
case PROC_SPROTECT: | case PROC_SPROTECT: | ||||
case PROC_STACKGAP_CTL: | |||||
case PROC_TRACE_CTL: | case PROC_TRACE_CTL: | ||||
case PROC_TRAPCAP_CTL: | case PROC_TRAPCAP_CTL: | ||||
case PROC_NO_NEW_PRIVS_CTL: | case PROC_NO_NEW_PRIVS_CTL: | ||||
case PROC_WXMAP_CTL: | case PROC_WXMAP_CTL: | ||||
error = copyin(PTRIN(uap->data), &flags, sizeof(flags)); | error = copyin(PTRIN(uap->data), &flags, sizeof(flags)); | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
data = &flags; | data = &flags; | ||||
Show All 18 Lines | freebsd32_procctl(struct thread *td, struct freebsd32_procctl_args *uap) | ||||
case PROC_REAP_KILL: | case PROC_REAP_KILL: | ||||
error = copyin(uap->data, &x.rk, sizeof(x.rk)); | error = copyin(uap->data, &x.rk, sizeof(x.rk)); | ||||
if (error != 0) | if (error != 0) | ||||
return (error); | return (error); | ||||
data = &x.rk; | data = &x.rk; | ||||
break; | break; | ||||
case PROC_ASLR_STATUS: | case PROC_ASLR_STATUS: | ||||
case PROC_PROTMAX_STATUS: | case PROC_PROTMAX_STATUS: | ||||
case PROC_STACKGAP_STATUS: | |||||
case PROC_TRACE_STATUS: | case PROC_TRACE_STATUS: | ||||
case PROC_TRAPCAP_STATUS: | case PROC_TRAPCAP_STATUS: | ||||
case PROC_NO_NEW_PRIVS_STATUS: | case PROC_NO_NEW_PRIVS_STATUS: | ||||
case PROC_WXMAP_STATUS: | case PROC_WXMAP_STATUS: | ||||
data = &flags; | data = &flags; | ||||
break; | break; | ||||
case PROC_PDEATHSIG_CTL: | case PROC_PDEATHSIG_CTL: | ||||
error = copyin(uap->data, &signum, sizeof(signum)); | error = copyin(uap->data, &signum, sizeof(signum)); | ||||
Show All 16 Lines | case PROC_REAP_STATUS: | ||||
break; | break; | ||||
case PROC_REAP_KILL: | case PROC_REAP_KILL: | ||||
error1 = copyout(&x.rk, uap->data, sizeof(x.rk)); | error1 = copyout(&x.rk, uap->data, sizeof(x.rk)); | ||||
if (error == 0) | if (error == 0) | ||||
error = error1; | error = error1; | ||||
break; | break; | ||||
case PROC_ASLR_STATUS: | case PROC_ASLR_STATUS: | ||||
case PROC_PROTMAX_STATUS: | case PROC_PROTMAX_STATUS: | ||||
case PROC_STACKGAP_STATUS: | |||||
case PROC_TRACE_STATUS: | case PROC_TRACE_STATUS: | ||||
case PROC_TRAPCAP_STATUS: | case PROC_TRAPCAP_STATUS: | ||||
case PROC_NO_NEW_PRIVS_STATUS: | case PROC_NO_NEW_PRIVS_STATUS: | ||||
case PROC_WXMAP_STATUS: | case PROC_WXMAP_STATUS: | ||||
if (error == 0) | if (error == 0) | ||||
error = copyout(&flags, uap->data, sizeof(flags)); | error = copyout(&flags, uap->data, sizeof(flags)); | ||||
break; | break; | ||||
case PROC_PDEATHSIG_STATUS: | case PROC_PDEATHSIG_STATUS: | ||||
▲ Show 20 Lines • Show All 239 Lines • Show Last 20 Lines |