diff options
Diffstat (limited to 'fs/fuse')
| -rw-r--r-- | fs/fuse/dir.c | 6 | ||||
| -rw-r--r-- | fs/fuse/file.c | 4 |
2 files changed, 10 insertions, 0 deletions
diff --git a/fs/fuse/dir.c b/fs/fuse/dir.c index e79e49b3eec7..29f1e9f6e85c 100644 --- a/fs/fuse/dir.c +++ b/fs/fuse/dir.c | |||
| @@ -96,6 +96,8 @@ static int fuse_lookup_iget(struct inode *dir, struct dentry *entry, | |||
| 96 | fuse_lookup_init(req, dir, entry, &outarg); | 96 | fuse_lookup_init(req, dir, entry, &outarg); |
| 97 | request_send(fc, req); | 97 | request_send(fc, req); |
| 98 | err = req->out.h.error; | 98 | err = req->out.h.error; |
| 99 | if (!err && (!outarg.nodeid || outarg.nodeid == FUSE_ROOT_ID)) | ||
| 100 | err = -EIO; | ||
| 99 | if (!err) { | 101 | if (!err) { |
| 100 | inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation, | 102 | inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation, |
| 101 | &outarg.attr); | 103 | &outarg.attr); |
| @@ -152,6 +154,10 @@ static int create_new_entry(struct fuse_conn *fc, struct fuse_req *req, | |||
| 152 | fuse_put_request(fc, req); | 154 | fuse_put_request(fc, req); |
| 153 | return err; | 155 | return err; |
| 154 | } | 156 | } |
| 157 | if (!outarg.nodeid || outarg.nodeid == FUSE_ROOT_ID) { | ||
| 158 | fuse_put_request(fc, req); | ||
| 159 | return -EIO; | ||
| 160 | } | ||
| 155 | inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation, | 161 | inode = fuse_iget(dir->i_sb, outarg.nodeid, outarg.generation, |
| 156 | &outarg.attr); | 162 | &outarg.attr); |
| 157 | if (!inode) { | 163 | if (!inode) { |
diff --git a/fs/fuse/file.c b/fs/fuse/file.c index 6454022b0536..657ab11c173b 100644 --- a/fs/fuse/file.c +++ b/fs/fuse/file.c | |||
| @@ -23,6 +23,10 @@ int fuse_open_common(struct inode *inode, struct file *file, int isdir) | |||
| 23 | struct fuse_file *ff; | 23 | struct fuse_file *ff; |
| 24 | int err; | 24 | int err; |
| 25 | 25 | ||
| 26 | /* VFS checks this, but only _after_ ->open() */ | ||
| 27 | if (file->f_flags & O_DIRECT) | ||
| 28 | return -EINVAL; | ||
| 29 | |||
| 26 | err = generic_file_open(inode, file); | 30 | err = generic_file_open(inode, file); |
| 27 | if (err) | 31 | if (err) |
| 28 | return err; | 32 | return err; |
