version 1.118, 2000/08/01 04:57:29 |
version 1.119, 2000/08/02 20:36:33 |
Line 244 sys_execve(struct proc *p, void *v, regi |
|
Line 244 sys_execve(struct proc *p, void *v, regi |
|
* initialize the fields of the exec package. |
* initialize the fields of the exec package. |
*/ |
*/ |
pack.ep_name = SCARG(uap, path); |
pack.ep_name = SCARG(uap, path); |
MALLOC(pack.ep_hdr, void *, exec_maxhdrsz, M_EXEC, M_WAITOK); |
pack.ep_hdr = malloc(exec_maxhdrsz, M_EXEC, M_WAITOK); |
pack.ep_hdrlen = exec_maxhdrsz; |
pack.ep_hdrlen = exec_maxhdrsz; |
pack.ep_hdrvalid = 0; |
pack.ep_hdrvalid = 0; |
pack.ep_ndp = &nid; |
pack.ep_ndp = &nid; |
Line 525 sys_execve(struct proc *p, void *v, regi |
|
Line 525 sys_execve(struct proc *p, void *v, regi |
|
psignal(p, SIGTRAP); |
psignal(p, SIGTRAP); |
|
|
p->p_emul = pack.ep_emul; |
p->p_emul = pack.ep_emul; |
FREE(pack.ep_hdr, M_EXEC); |
free(pack.ep_hdr, M_EXEC); |
|
|
#ifdef KTRACE |
#ifdef KTRACE |
if (KTRPOINT(p, KTR_EMUL)) |
if (KTRPOINT(p, KTR_EMUL)) |
|
|
uvm_km_free_wakeup(exec_map, (vaddr_t) argp, NCARGS); |
uvm_km_free_wakeup(exec_map, (vaddr_t) argp, NCARGS); |
|
|
freehdr: |
freehdr: |
FREE(pack.ep_hdr, M_EXEC); |
free(pack.ep_hdr, M_EXEC); |
return error; |
return error; |
|
|
exec_abort: |
exec_abort: |
|
|
uvm_deallocate(&vm->vm_map, VM_MIN_ADDRESS, |
uvm_deallocate(&vm->vm_map, VM_MIN_ADDRESS, |
VM_MAXUSER_ADDRESS - VM_MIN_ADDRESS); |
VM_MAXUSER_ADDRESS - VM_MIN_ADDRESS); |
if (pack.ep_emul_arg) |
if (pack.ep_emul_arg) |
FREE(pack.ep_emul_arg, M_TEMP); |
free(pack.ep_emul_arg, M_TEMP); |
FREE(nid.ni_cnd.cn_pnbuf, M_NAMEI); |
FREE(nid.ni_cnd.cn_pnbuf, M_NAMEI); |
vn_lock(pack.ep_vp, LK_EXCLUSIVE | LK_RETRY); |
vn_lock(pack.ep_vp, LK_EXCLUSIVE | LK_RETRY); |
VOP_CLOSE(pack.ep_vp, FREAD, cred, p); |
VOP_CLOSE(pack.ep_vp, FREAD, cred, p); |
vput(pack.ep_vp); |
vput(pack.ep_vp); |
uvm_km_free_wakeup(exec_map, (vaddr_t) argp, NCARGS); |
uvm_km_free_wakeup(exec_map, (vaddr_t) argp, NCARGS); |
FREE(pack.ep_hdr, M_EXEC); |
free(pack.ep_hdr, M_EXEC); |
exit1(p, W_EXITCODE(0, SIGABRT)); |
exit1(p, W_EXITCODE(0, SIGABRT)); |
exit1(p, -1); |
exit1(p, -1); |
|
|