diff options
author | Mike Marshall <hubcap@omnibond.com> | 2019-11-26 12:39:37 -0500 |
---|---|---|
committer | Mike Marshall <hubcap@omnibond.com> | 2019-12-04 08:52:55 -0500 |
commit | f9bbb68233aa5bd5ef238bd3532fddf92fa1b53c (patch) | |
tree | 4aeb26c8576aba66f2e479766a4c00806cb3f5f1 /fs/orangefs/orangefs-kernel.h | |
parent | a99d8080aaf358d5d23581244e5da23b35e340b9 (diff) | |
download | blackbird-op-linux-f9bbb68233aa5bd5ef238bd3532fddf92fa1b53c.tar.gz blackbird-op-linux-f9bbb68233aa5bd5ef238bd3532fddf92fa1b53c.zip |
orangefs: posix open permission checking...
Orangefs has no open, and orangefs checks file permissions
on each file access. Posix requires that file permissions
be checked on open and nowhere else. Orangefs-through-the-kernel
needs to seem posix compliant.
The VFS opens files, even if the filesystem provides no
method. We can see if a file was successfully opened for
read and or for write by looking at file->f_mode.
When writes are flowing from the page cache, file is no
longer available. We can trust the VFS to have checked
file->f_mode before writing to the page cache.
The mode of a file might change between when it is opened
and IO commences, or it might be created with an arbitrary mode.
We'll make sure we don't hit EACCES during the IO stage by
using UID 0. Some of the time we have access without changing
to UID 0 - how to check?
Signed-off-by: Mike Marshall <hubcap@omnibond.com>
Diffstat (limited to 'fs/orangefs/orangefs-kernel.h')
-rw-r--r-- | fs/orangefs/orangefs-kernel.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/orangefs/orangefs-kernel.h b/fs/orangefs/orangefs-kernel.h index 34a6c99fa29b..ed67f39fa7ce 100644 --- a/fs/orangefs/orangefs-kernel.h +++ b/fs/orangefs/orangefs-kernel.h @@ -398,7 +398,8 @@ bool __is_daemon_in_service(void); */ int orangefs_revalidate_mapping(struct inode *); ssize_t wait_for_direct_io(enum ORANGEFS_io_type, struct inode *, loff_t *, - struct iov_iter *, size_t, loff_t, struct orangefs_write_range *, int *); + struct iov_iter *, size_t, loff_t, struct orangefs_write_range *, int *, + struct file *); ssize_t do_readv_writev(enum ORANGEFS_io_type, struct file *, loff_t *, struct iov_iter *); |