aboutsummaryrefslogtreecommitdiff
path: root/sys/kern/kern_filedesc.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/kern_filedesc.c')
-rw-r--r--sys/kern/kern_filedesc.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/sys/kern/kern_filedesc.c b/sys/kern/kern_filedesc.c
index 5488c35..b95d123 100644
--- a/sys/kern/kern_filedesc.c
+++ b/sys/kern/kern_filedesc.c
@@ -242,6 +242,10 @@ write(int fd, const void *buf, size_t count)
}
desc = fd_from_fdnum(td, fd);
+ if (desc->oflag != O_WRONLY && desc->oflag != O_WRONLY) {
+ ret = -EACCES;
+ goto cleanup;
+ }
/* Does this file descriptor exist? */
if (desc == NULL) {
@@ -291,15 +295,7 @@ open(const char *pathname, int oflag)
return status;
}
- /*
- * TODO: Handle more flags... For now we only support
- * O_RDONLY, so deny other flags.
- */
- if ((oflag & ~O_RDONLY) != 0){
- fd_close_fdnum(this_td(), fd->fdno);
- return -EACCES;
- }
-
+ fd->oflag = oflag;
fd->vnode = vp;
fd->is_dir = (vp->type == VDIR);
return fd->fdno;
@@ -329,6 +325,10 @@ read(int fd, void *buf, size_t count)
return -EBADF;
}
+ if (fd_desc->oflag == O_WRONLY) {
+ return -EACCES;
+ }
+
sio.offset = fd_desc->offset;
vnode = fd_desc->vnode;