diff options
author | Todd C. Miller <millert@cvs.openbsd.org> | 2015-01-15 20:36:18 +0000 |
---|---|---|
committer | Todd C. Miller <millert@cvs.openbsd.org> | 2015-01-15 20:36:18 +0000 |
commit | d92f6f7daad9a77eb719297f80e58ba9e96105f7 (patch) | |
tree | 5bddc6674a84b1fd94be04d430ba664bf78cb604 /sys/kern | |
parent | 1cf615eeb2b8a5a8dc57650b0267410cebefd310 (diff) |
The flags variable in shmat was not actually used. We need UVM_FLAG_*
flags, not mmap-style flags for UVM_MAPFLAG(). Remove the nonsensical
MAP_ANON|MAP_SHARED value and convert MAP_FIXED to UVM_FLAG_FIXED.
OK guenther@
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/sysv_shm.c | 9 |
1 files changed, 4 insertions, 5 deletions
diff --git a/sys/kern/sysv_shm.c b/sys/kern/sysv_shm.c index 8584004b3cd..c41c8687b6b 100644 --- a/sys/kern/sysv_shm.c +++ b/sys/kern/sysv_shm.c @@ -1,4 +1,4 @@ -/* $OpenBSD: sysv_shm.c,v 1.64 2014/12/19 05:59:21 tedu Exp $ */ +/* $OpenBSD: sysv_shm.c,v 1.65 2015/01/15 20:36:17 millert Exp $ */ /* $NetBSD: sysv_shm.c,v 1.50 1998/10/21 22:24:29 tron Exp $ */ /* @@ -212,7 +212,7 @@ sys_shmat(struct proc *p, void *v, register_t *retval) syscallarg(const void *) shmaddr; syscallarg(int) shmflg; } */ *uap = v; - int error, i, flags; + int error, i, flags = 0; struct ucred *cred = p->p_ucred; struct shmid_ds *shmseg; struct shmmap_head *shmmap_h; @@ -251,9 +251,8 @@ sys_shmat(struct proc *p, void *v, register_t *retval) prot = PROT_READ; if ((SCARG(uap, shmflg) & SHM_RDONLY) == 0) prot |= PROT_WRITE; - flags = MAP_ANON | MAP_SHARED; if (SCARG(uap, shmaddr)) { - flags |= MAP_FIXED; + flags |= UVM_FLAG_FIXED; if (SCARG(uap, shmflg) & SHM_RND) attach_va = (vaddr_t)SCARG(uap, shmaddr) & ~(SHMLBA-1); @@ -267,7 +266,7 @@ sys_shmat(struct proc *p, void *v, register_t *retval) uao_reference(shm_handle->shm_object); error = uvm_map(&p->p_vmspace->vm_map, &attach_va, size, shm_handle->shm_object, 0, 0, UVM_MAPFLAG(prot, prot, - MAP_INHERIT_SHARE, MADV_RANDOM, 0)); + MAP_INHERIT_SHARE, MADV_RANDOM, flags)); if (error) { uao_detach(shm_handle->shm_object); return (error); |