summaryrefslogtreecommitdiff
path: root/sys/alpha/linux
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2003-03-21 19:49:34 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2003-03-21 19:49:34 +0000
commit43cf129c99e75e559f33da20e0a1089e193033e0 (patch)
tree43550d8fe91a41ee3225185c991b731b4201205e /sys/alpha/linux
parent868d8b6286b3ef1e3a6d0912bdd3e775ff510397 (diff)
Notes
Diffstat (limited to 'sys/alpha/linux')
-rw-r--r--sys/alpha/linux/linux_sysvec.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/sys/alpha/linux/linux_sysvec.c b/sys/alpha/linux/linux_sysvec.c
index 9e9e1f97536b..40deced2cf01 100644
--- a/sys/alpha/linux/linux_sysvec.c
+++ b/sys/alpha/linux/linux_sysvec.c
@@ -81,25 +81,26 @@ SET_DECLARE(linux_ioctl_handler_set, struct linux_ioctl_handler);
void osendsig(sig_t catcher, int sig, sigset_t *mask, u_long code);
-static int elf_linux_fixup(long **stack_base,
+static int elf_linux_fixup(register_t **stack_base,
struct image_params *iparams);
static int exec_linux_imgact_try(struct image_params *iparams);
static int
-elf_linux_fixup(long **stack_base, struct image_params *imgp)
+elf_linux_fixup(register_t **stack_base, struct image_params *imgp)
{
- long *pos;
Elf64_Auxargs *args;
+ register_t *pos;
+ KASSERT(curthread->td_proc == imgp->proc &&
+ (curthread->td_proc->p_flag & P_THREADED) == 0,
+ ("unsafe elf_linux_fixup(), should be curproc"));
args = (Elf64_Auxargs *)imgp->auxargs;
pos = *stack_base + (imgp->argc + imgp->envc + 2);
- if (args->trace) {
+ if (args->trace)
AUXARGS_ENTRY(pos, AT_DEBUG, 1);
- }
- if (args->execfd != -1) {
+ if (args->execfd != -1)
AUXARGS_ENTRY(pos, AT_EXECFD, args->execfd);
- }
AUXARGS_ENTRY(pos, AT_PHDR, args->phdr);
AUXARGS_ENTRY(pos, AT_PHENT, args->phent);
AUXARGS_ENTRY(pos, AT_PHNUM, args->phnum);
@@ -107,19 +108,17 @@ elf_linux_fixup(long **stack_base, struct image_params *imgp)
AUXARGS_ENTRY(pos, AT_FLAGS, args->flags);
AUXARGS_ENTRY(pos, AT_ENTRY, args->entry);
AUXARGS_ENTRY(pos, AT_BASE, args->base);
- PROC_LOCK(imgp->proc);
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_GID, imgp->proc->p_ucred->cr_rgid);
AUXARGS_ENTRY(pos, AT_EGID, imgp->proc->p_ucred->cr_svgid);
- PROC_UNLOCK(imgp->proc);
AUXARGS_ENTRY(pos, AT_NULL, 0);
free(imgp->auxargs, M_TEMP);
imgp->auxargs = NULL;
(*stack_base)--;
- **stack_base = (long)imgp->argc;
+ **stack_base = (register_t)imgp->argc;
return 0;
}