diff options
author | Miklos Szeredi <miklos@szeredi.hu> | 2004-11-30 00:00:02 +0000 |
---|---|---|
committer | Miklos Szeredi <miklos@szeredi.hu> | 2004-11-30 00:00:02 +0000 |
commit | 96dfad7555e4cc410caf60408f517154119169da (patch) | |
tree | 9e2b38b2bb660620273796a702884b3e62232454 /kernel | |
parent | 162bcbbff3d531c7d1a630da706a2d0be80f8995 (diff) | |
download | libfuse-96dfad7555e4cc410caf60408f517154119169da.tar.gz |
merge to 2_0_merge4
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/dir.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/kernel/dir.c b/kernel/dir.c index fe8e803..19834b4 100644 --- a/kernel/dir.c +++ b/kernel/dir.c @@ -633,8 +633,15 @@ static int fuse_permission(struct inode *inode, int mask, struct nameidata *nd) keeping it open... */ return err; - } else + } else { + int mode = inode->i_mode; + if ((mask & MAY_WRITE) && IS_RDONLY(inode) && + (S_ISREG(mode) || S_ISDIR(mode) || S_ISLNK(mode))) + return -EROFS; + if ((mask & MAY_EXEC) && !S_ISDIR(mode) && !(mode & S_IXUGO)) + return -EACCES; return 0; + } } static int parse_dirfile(char *buf, size_t nbytes, struct file *file, |