lkml.org 
[lkml]   [2010]   [Feb]   [16]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 1/2] sysfs: sysfs_sd_setattr set iattrs unconditionally
    Date
    From: Eric W. Biederman <ebiederm@xmission.com>

    There is currently a bug in sysfs_sd_setattr inherited from
    sysfs_setattr in 2.6.32 where the first time we set the attributes
    on a sysfs file we allocate backing store but do not set the
    backing store attributes. Resulting in overly restrictive
    permissions on sysfs files.

    The fix is to simply modify the code so that it always executes
    when we update the sysfs attributes, as we did in 2.6.31 and earlier.

    Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
    Tested-by: Jean Delvare <khali@linux-fr.org>
    Cc: stable <stable@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    fs/sysfs/inode.c | 35 +++++++++++++++++------------------
    1 files changed, 17 insertions(+), 18 deletions(-)

    diff --git a/fs/sysfs/inode.c b/fs/sysfs/inode.c
    index 220b758..6a06a1d 100644
    --- a/fs/sysfs/inode.c
    +++ b/fs/sysfs/inode.c
    @@ -81,24 +81,23 @@ int sysfs_sd_setattr(struct sysfs_dirent *sd, struct iattr * iattr)
    if (!sd_attrs)
    return -ENOMEM;
    sd->s_iattr = sd_attrs;
    - } else {
    - /* attributes were changed at least once in past */
    - iattrs = &sd_attrs->ia_iattr;
    -
    - if (ia_valid & ATTR_UID)
    - iattrs->ia_uid = iattr->ia_uid;
    - if (ia_valid & ATTR_GID)
    - iattrs->ia_gid = iattr->ia_gid;
    - if (ia_valid & ATTR_ATIME)
    - iattrs->ia_atime = iattr->ia_atime;
    - if (ia_valid & ATTR_MTIME)
    - iattrs->ia_mtime = iattr->ia_mtime;
    - if (ia_valid & ATTR_CTIME)
    - iattrs->ia_ctime = iattr->ia_ctime;
    - if (ia_valid & ATTR_MODE) {
    - umode_t mode = iattr->ia_mode;
    - iattrs->ia_mode = sd->s_mode = mode;
    - }
    + }
    + /* attributes were changed at least once in past */
    + iattrs = &sd_attrs->ia_iattr;
    +
    + if (ia_valid & ATTR_UID)
    + iattrs->ia_uid = iattr->ia_uid;
    + if (ia_valid & ATTR_GID)
    + iattrs->ia_gid = iattr->ia_gid;
    + if (ia_valid & ATTR_ATIME)
    + iattrs->ia_atime = iattr->ia_atime;
    + if (ia_valid & ATTR_MTIME)
    + iattrs->ia_mtime = iattr->ia_mtime;
    + if (ia_valid & ATTR_CTIME)
    + iattrs->ia_ctime = iattr->ia_ctime;
    + if (ia_valid & ATTR_MODE) {
    + umode_t mode = iattr->ia_mode;
    + iattrs->ia_mode = sd->s_mode = mode;
    }
    return 0;
    }
    --
    1.7.0


    \
     
     \ /
      Last update: 2010-02-17 01:13    [W:0.022 / U:0.180 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site