summaryrefslogtreecommitdiffstats
path: root/sys/kern/sys_process.c
diff options
context:
space:
mode:
authorderaadt <deraadt@openbsd.org>2008-10-31 17:15:29 +0000
committerderaadt <deraadt@openbsd.org>2008-10-31 17:15:29 +0000
commit270a889ebbe198288b6616fbdb15a3a92a2376e3 (patch)
tree1a7f94574fbf06367505ca47455d6b05b91db13d /sys/kern/sys_process.c
parentcheckdirs() walks allproc and calls sleeping functions if directories have (diff)
downloadwireguard-openbsd-270a889ebbe198288b6616fbdb15a3a92a2376e3.tar.xz
wireguard-openbsd-270a889ebbe198288b6616fbdb15a3a92a2376e3.zip
kern_sysctl.c
Diffstat (limited to 'sys/kern/sys_process.c')
-rw-r--r--sys/kern/sys_process.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index 6759fd8c15c..d2245e50948 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sys_process.c,v 1.40 2008/09/16 19:41:06 kettenis Exp $ */
+/* $OpenBSD: sys_process.c,v 1.41 2008/10/31 17:15:30 deraadt Exp $ */
/* $NetBSD: sys_process.c,v 1.55 1996/05/15 06:17:47 tls Exp $ */
/*-
@@ -589,6 +589,7 @@ process_checkioperm(struct proc *p, struct proc *t)
int
process_domem(struct proc *curp, struct proc *p, struct uio *uio, int req)
{
+ struct vmspace *vm;
int error;
vaddr_t addr;
vsize_t len;
@@ -604,10 +605,14 @@ process_domem(struct proc *curp, struct proc *p, struct uio *uio, int req)
if ((p->p_flag & P_WEXIT) || (p->p_vmspace->vm_refcnt < 1))
return(EFAULT);
addr = uio->uio_offset;
- p->p_vmspace->vm_refcnt++; /* XXX */
- error = uvm_io(&p->p_vmspace->vm_map, uio,
+
+ vm = p->p_vmspace;
+ vm->vm_refcnt++;
+
+ error = uvm_io(&vm->vm_map, uio,
(req == PT_WRITE_I) ? UVM_IO_FIXPROT : 0);
- uvmspace_free(p->p_vmspace);
+
+ uvmspace_free(vm);
if (error == 0 && req == PT_WRITE_I)
pmap_proc_iflush(p, addr, len);