aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorMiklos Szeredi <miklos@szeredi.hu>2004-11-30 00:00:02 +0000
committerMiklos Szeredi <miklos@szeredi.hu>2004-11-30 00:00:02 +0000
commit96dfad7555e4cc410caf60408f517154119169da (patch)
tree9e2b38b2bb660620273796a702884b3e62232454 /kernel
parent162bcbbff3d531c7d1a630da706a2d0be80f8995 (diff)
downloadlibfuse-96dfad7555e4cc410caf60408f517154119169da.tar.gz
merge to 2_0_merge4
Diffstat (limited to 'kernel')
-rw-r--r--kernel/dir.c9
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,