X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=fs%2Fjfs%2Fioctl.c;h=dfda12a073e1985fb28b798df2e9088a9a996be4;hb=c64768a7d671bcde80bca2aed93f9e07edc069c3;hp=ed814b1ff4d9b1908d4c7c0418f5c7a975392db1;hpb=ea14fad0d416354a4e9bb1a04f32acba706f9548;p=~andy%2Flinux diff --git a/fs/jfs/ioctl.c b/fs/jfs/ioctl.c index ed814b1ff4d..dfda12a073e 100644 --- a/fs/jfs/ioctl.c +++ b/fs/jfs/ioctl.c @@ -59,6 +59,7 @@ int jfs_ioctl(struct inode * inode, struct file * filp, unsigned int cmd, switch (cmd) { case JFS_IOC_GETFLAGS: + jfs_get_inode_flags(jfs_inode); flags = jfs_inode->mode2 & JFS_FL_USER_VISIBLE; flags = jfs_map_ext2(flags, 0); return put_user(flags, (int __user *) arg); @@ -68,7 +69,7 @@ int jfs_ioctl(struct inode * inode, struct file * filp, unsigned int cmd, if (IS_RDONLY(inode)) return -EROFS; - if ((current->fsuid != inode->i_uid) && !capable(CAP_FOWNER)) + if (!is_owner_or_cap(inode)) return -EACCES; if (get_user(flags, (int __user *) arg)) @@ -78,6 +79,10 @@ int jfs_ioctl(struct inode * inode, struct file * filp, unsigned int cmd, if (!S_ISDIR(inode->i_mode)) flags &= ~JFS_DIRSYNC_FL; + /* Is it quota file? Do not allow user to mess with it */ + if (IS_NOQUOTA(inode)) + return -EPERM; + jfs_get_inode_flags(jfs_inode); oldflags = jfs_inode->mode2; /*