aboutsummaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/dev.c2
-rw-r--r--kernel/dir.c3
-rw-r--r--kernel/inode.c11
3 files changed, 12 insertions, 4 deletions
diff --git a/kernel/dev.c b/kernel/dev.c
index daa464e..a31615d 100644
--- a/kernel/dev.c
+++ b/kernel/dev.c
@@ -632,7 +632,7 @@ int fuse_dev_init()
}
proc_fs_fuse->owner = THIS_MODULE;
- proc_fuse_dev = create_proc_entry("dev", S_IFSOCK | 0600, proc_fs_fuse);
+ proc_fuse_dev = create_proc_entry("dev", S_IFSOCK | 0666, proc_fs_fuse);
if(!proc_fuse_dev) {
printk("fuse: failed to create entry in /proc/fs/fuse\n");
goto err;
diff --git a/kernel/dir.c b/kernel/dir.c
index 0fffcab..5fec669 100644
--- a/kernel/dir.c
+++ b/kernel/dir.c
@@ -409,8 +409,7 @@ static int _fuse_permission(struct inode *inode, int mask)
keeping it open... */
return err;
- }
- else
+ } else
return 0;
}
diff --git a/kernel/inode.c b/kernel/inode.c
index d896965..257b41d 100644
--- a/kernel/inode.c
+++ b/kernel/inode.c
@@ -23,6 +23,10 @@
#define kstatfs statfs
#endif
+#ifndef FS_SAFE
+#define FS_SAFE 0
+#endif
+
static void fuse_read_inode(struct inode *inode)
{
/* No op */
@@ -193,6 +197,11 @@ static int fuse_read_super(struct super_block *sb, void *data, int silent)
struct inode *root;
struct fuse_mount_data *d = data;
+ if(!capable(CAP_SYS_ADMIN)) {
+ if(d->flags & FUSE_ALLOW_OTHER)
+ return -EPERM;
+ }
+
sb->s_blocksize = PAGE_CACHE_SIZE;
sb->s_blocksize_bits = PAGE_CACHE_SHIFT;
sb->s_magic = FUSE_SUPER_MAGIC;
@@ -246,7 +255,7 @@ static struct file_system_type fuse_fs_type = {
.name = "fuse",
.get_sb = fuse_get_sb,
.kill_sb = kill_anon_super,
- .fs_flags = 0
+ .fs_flags = FS_SAFE,
};
#else
static struct super_block *fuse_read_super_compat(struct super_block *sb,