diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-05-23 03:13:53 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-05-23 03:13:53 +0200 |
commit | cbfef53360ea88fa7ef9f80def778fba9b05d21e (patch) | |
tree | 9e23ee08206ec0304e25e8a93eabc2d5bcd8ae9c /fs/kernfs | |
parent | Merge 3.15-rc3 into staging-next (diff) | |
parent | Linux 3.15-rc6 (diff) | |
download | linux-cbfef53360ea88fa7ef9f80def778fba9b05d21e.tar.xz linux-cbfef53360ea88fa7ef9f80def778fba9b05d21e.zip |
Merge 3.15-rc6 into driver-core-next
We want the kernfs fixes in this branch as well for testing.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/kernfs')
-rw-r--r-- | fs/kernfs/file.c | 17 |
1 files changed, 10 insertions, 7 deletions
diff --git a/fs/kernfs/file.c b/fs/kernfs/file.c index 40251cd741a0..e3d37f607f97 100644 --- a/fs/kernfs/file.c +++ b/fs/kernfs/file.c @@ -611,6 +611,7 @@ static void kernfs_put_open_node(struct kernfs_node *kn, static int kernfs_fop_open(struct inode *inode, struct file *file) { struct kernfs_node *kn = file->f_path.dentry->d_fsdata; + struct kernfs_root *root = kernfs_root(kn); const struct kernfs_ops *ops; struct kernfs_open_file *of; bool has_read, has_write, has_mmap; @@ -625,14 +626,16 @@ static int kernfs_fop_open(struct inode *inode, struct file *file) has_write = ops->write || ops->mmap; has_mmap = ops->mmap; - /* check perms and supported operations */ - if ((file->f_mode & FMODE_WRITE) && - (!(inode->i_mode & S_IWUGO) || !has_write)) - goto err_out; + /* see the flag definition for details */ + if (root->flags & KERNFS_ROOT_EXTRA_OPEN_PERM_CHECK) { + if ((file->f_mode & FMODE_WRITE) && + (!(inode->i_mode & S_IWUGO) || !has_write)) + goto err_out; - if ((file->f_mode & FMODE_READ) && - (!(inode->i_mode & S_IRUGO) || !has_read)) - goto err_out; + if ((file->f_mode & FMODE_READ) && + (!(inode->i_mode & S_IRUGO) || !has_read)) + goto err_out; + } /* allocate a kernfs_open_file for the file */ error = -ENOMEM; |