lkml.org 
[lkml]   [2008]   [May]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 07/22] fat: dont call notify_change
    From: Miklos Szeredi <mszeredi@suse.cz>

    The FAT_IOCTL_SET_ATTRIBUTES ioctl() calls notify_change() to change
    the file mode before changing the inode attributes. Replace with
    explicit calls to security_inode_setattr(), fat_setattr() and
    fsnotify_change().

    This is equivalent to the original. The reason it is needed, is that
    later in the series we move the immutable check into notify_change().
    That would break the FAT_IOCTL_SET_ATTRIBUTES ioctl, as it needs to
    perform the mode change regardless of the immutability of the file.

    Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
    CC: OGAWA Hirofumi <hirofumi@mail.parknet.co.jp>
    ---
    fs/fat/file.c | 15 ++++++++++++++-
    1 file changed, 14 insertions(+), 1 deletion(-)

    Index: linux-2.6/fs/fat/file.c
    ===================================================================
    --- linux-2.6.orig/fs/fat/file.c 2008-05-16 17:50:35.000000000 +0200
    +++ linux-2.6/fs/fat/file.c 2008-05-16 17:50:45.000000000 +0200
    @@ -16,6 +16,8 @@
    #include <linux/writeback.h>
    #include <linux/backing-dev.h>
    #include <linux/blkdev.h>
    +#include <linux/fsnotify.h>
    +#include <linux/security.h>

    int fat_generic_ioctl(struct inode *inode, struct file *filp,
    unsigned int cmd, unsigned long arg)
    @@ -65,6 +67,7 @@ int fat_generic_ioctl(struct inode *inod

    /* Equivalent to a chmod() */
    ia.ia_valid = ATTR_MODE | ATTR_CTIME;
    + ia.ia_ctime = current_fs_time(inode->i_sb);
    if (is_dir) {
    ia.ia_mode = MSDOS_MKMODE(attr,
    S_IRWXUGO & ~sbi->options.fs_dmask)
    @@ -91,11 +94,21 @@ int fat_generic_ioctl(struct inode *inod
    }
    }

    + /*
    + * The security check is questionable... We single
    + * out the RO attribute for checking by the security
    + * module, just because it maps to a file mode.
    + */
    + err = security_inode_setattr(filp->f_path.dentry, &ia);
    + if (err)
    + goto up;
    +
    /* This MUST be done before doing anything irreversible... */
    - err = notify_change(filp->f_path.dentry, &ia);
    + err = fat_setattr(filp->f_path.dentry, &ia);
    if (err)
    goto up;

    + fsnotify_change(filp->f_path.dentry, ia.ia_valid);
    if (sbi->options.sys_immutable) {
    if (attr & ATTR_SYS)
    inode->i_flags |= S_IMMUTABLE;
    --


    \
     
     \ /
      Last update: 2008-05-16 18:37    [W:5.169 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site