lkml.org 
[lkml]   [2006]   [Jan]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 3/6] vfs: propagate vfsmount into chown_common()

    ;
    ; Bind Mount Extensions
    ;
    ; Copyright (C) 2003-2006 Herbert Pötzl <herbert@13thfloor.at>
    ;
    ; the vfsmount is propagated into chown_common() to allow
    ; for vfsmount based checks there, in this case the
    ; MNT_IS_RDONLY() check to disallow changes
    ;
    ;
    ; Changelog:
    ;
    ; 0.01 - broken out from bme0.05
    ;

    Signed-off-by: Herbert Pötzl <herbert@13thfloor.at>

    diff -NurpP --minimal linux-2.6.16-rc1/fs/open.c linux-2.6.16-rc1-bme0.06.2-cc0.01/fs/open.c
    --- linux-2.6.16-rc1/fs/open.c 2006-01-18 06:08:34 +0100
    +++ linux-2.6.16-rc1-bme0.06.2-cc0.01/fs/open.c 2006-01-21 09:08:38 +0100
    @@ -669,7 +669,8 @@ out:
    return error;
    }

    -static int chown_common(struct dentry * dentry, uid_t user, gid_t group)
    +static int chown_common(struct dentry *dentry, struct vfsmount *mnt,
    + uid_t user, gid_t group)
    {
    struct inode * inode;
    int error;
    @@ -681,7 +682,7 @@ static int chown_common(struct dentry *
    goto out;
    }
    error = -EROFS;
    - if (IS_RDONLY(inode))
    + if (IS_RDONLY(inode) || MNT_IS_RDONLY(mnt))
    goto out;
    error = -EPERM;
    if (IS_IMMUTABLE(inode) || IS_APPEND(inode))
    @@ -711,7 +712,7 @@ asmlinkage long sys_chown(const char __u

    error = user_path_walk(filename, &nd);
    if (!error) {
    - error = chown_common(nd.dentry, user, group);
    + error = chown_common(nd.dentry, nd.mnt, user, group);
    path_release(&nd);
    }
    return error;
    @@ -724,7 +725,7 @@ asmlinkage long sys_lchown(const char __

    error = user_path_walk_link(filename, &nd);
    if (!error) {
    - error = chown_common(nd.dentry, user, group);
    + error = chown_common(nd.dentry, nd.mnt, user, group);
    path_release(&nd);
    }
    return error;
    @@ -738,7 +739,7 @@ asmlinkage long sys_fchown(unsigned int

    file = fget(fd);
    if (file) {
    - error = chown_common(file->f_dentry, user, group);
    + error = chown_common(file->f_dentry, file->f_vfsmnt, user, group);
    fput(file);
    }
    return error;
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-01-21 09:43    [W:0.022 / U:0.256 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site