diff options
author | Ian Moffett <ian@osmora.org> | 2024-04-18 18:30:42 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2024-04-18 18:30:42 -0400 |
commit | b75dd3a112708584a930f85d345835f36a722f5a (patch) | |
tree | f1b5f7a7038095ffb9c14a9dd5e0ca2ab23ecf92 /sys/kern | |
parent | 265d015c932772bdfc67ea1058188f21dc93ed04 (diff) |
kernel: filedesc: Handle multiple oflag bits
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys/kern')
-rw-r--r-- | sys/kern/kern_filedesc.c | 18 |
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; |