summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGuido van Rooij <guido@FreeBSD.org>1998-05-18 18:26:27 +0000
committerGuido van Rooij <guido@FreeBSD.org>1998-05-18 18:26:27 +0000
commit05feb99ff10c88f7c8a8068fe7627f086ccf808f (patch)
tree5fdb50f83ff71e9c2716ad37c71cb9b25ff7ee49
parent068373b683d937852817355588c98076839e2e53 (diff)
Notes
-rw-r--r--sys/vm/vm_mmap.c24
1 files changed, 18 insertions, 6 deletions
diff --git a/sys/vm/vm_mmap.c b/sys/vm/vm_mmap.c
index 7baf8f335b38..ada1df653e79 100644
--- a/sys/vm/vm_mmap.c
+++ b/sys/vm/vm_mmap.c
@@ -38,7 +38,7 @@
* from: Utah $Hdr: vm_mmap.c 1.6 91/10/21$
*
* @(#)vm_mmap.c 8.4 (Berkeley) 1/12/94
- * $Id: vm_mmap.c,v 1.74 1998/03/07 21:37:01 dyson Exp $
+ * $Id: vm_mmap.c,v 1.75 1998/03/12 19:36:18 guido Exp $
*/
/*
@@ -295,12 +295,24 @@ mmap(p, uap)
* we're at securelevel < 1, to allow the XIG X server
* to continue to work.
*/
- if (((flags & MAP_SHARED) != 0 ||
- (vp->v_type == VCHR && disablexworkaround)) &&
- (fp->f_flag & FWRITE) == 0 && (prot & PROT_WRITE) != 0)
- return (EACCES);
- else
+
+ if ((flags & MAP_SHARED) != 0 ||
+ (vp->v_type == VCHR && disablexworkaround)) {
+ if ((fp->f_flag & FWRITE) != 0) {
+ if ((error =
+ VOP_GETATTR(vp, &va,
+ p->p_ucred, p)))
+ return (error);
+ if ((va.va_flags &
+ (IMMUTABLE|APPEND)) == 0)
+ maxprot |= VM_PROT_WRITE;
+ else if (prot & PROT_WRITE)
+ return (EPERM);
+ } else if ((prot & PROT_WRITE) != 0)
+ return (EACCES);
+ } else
maxprot |= VM_PROT_WRITE;
+
handle = (void *)vp;
}
}