Index: vfs_syscalls.c =================================================================== RCS file: /home/cvsup/freebsd/CVS/src/sys/kern/vfs_syscalls.c,v retrieving revision 1.51.2.5 diff -u -r1.51.2.5 vfs_syscalls.c --- vfs_syscalls.c 1997/10/01 06:23:48 1.51.2.5 +++ vfs_syscalls.c 1997/10/28 22:04:43 @@ -688,11 +688,13 @@ struct flock lf; struct nameidata nd; + flags = FFLAGS(uap->flags); + if ((flags & FREAD + FWRITE) == 0) + return (EINVAL); error = falloc(p, &nfp, &indx); if (error) return (error); fp = nfp; - flags = FFLAGS(uap->flags); cmode = ((uap->mode &~ fdp->fd_cmask) & ALLPERMS) &~ S_ISTXT; NDINIT(&nd, LOOKUP, FOLLOW, UIO_USERSPACE, uap->path, p); p->p_dupfd = -indx - 1; /* XXX check for fdopen */ Index: mem.c =================================================================== RCS file: /home/cvsup/freebsd/CVS/src/sys/i386/i386/mem.c,v retrieving revision 1.38 retrieving revision 1.38.2.1 diff -u -r1.38 -r1.38.2.1 --- mem.c 1996/09/27 13:25:06 1.38 +++ mem.c 1997/10/23 22:14:24 1.38.2.1 @@ -169,6 +169,7 @@ int fmt; struct proc *p; { + int error; struct trapframe *fp; switch (minor(dev)) { @@ -179,6 +180,11 @@ return ENODEV; #endif case 14: + error = suser(p->p_ucred, &p->p_acflag); + if (error != 0) + return (error); + if (securelevel > 0) + return (EPERM); fp = (struct trapframe *)curproc->p_md.md_regs; fp->tf_eflags |= PSL_IOPL; break;