Index: vm/vm_mmap.c =================================================================== RCS file: /home/ncvs/src/sys/vm/vm_mmap.c,v retrieving revision 1.186 diff -u -r1.186 vm_mmap.c --- vm/vm_mmap.c 18 Mar 2004 20:58:51 -0000 1.186 +++ vm/vm_mmap.c 4 Apr 2004 10:55:23 -0000 @@ -341,14 +341,14 @@ * permission although we opened it without asking * for it, bail out. */ - if ((flags & MAP_SHARED) != 0 || vp->v_type == VCHR) { + if ((flags & MAP_SHARED) != 0) { if ((fp->f_flag & FWRITE) != 0) { maxprot |= VM_PROT_WRITE; } else if ((prot & PROT_WRITE) != 0) { error = EACCES; goto done; } - } else { + } else if (vp->v_type != VCHR || (fp->f_flag & FWRITE) != 0) { maxprot |= VM_PROT_WRITE; } handle = (void *)vp; @@ -1113,6 +1113,11 @@ /* * cdevs does not provide private mappings of any kind. */ + if ((*maxprotp & VM_PROT_WRITE) == 0 && + (prot & PROT_WRITE) != 0) { + error = EACCES; + goto done; + } /* * However, for XIG X server to continue to work, * we should allow the superuser to do it anyway.