sysfs: sysfs_sd_setattr set iattrs unconditionally

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Linux Kernel Mailing List
Date: Tuesday, February 16, 2010 - 6:59 pm

Gitweb:     http://git.kernel.org/linus/7c0ff870d1ed287504a61ed865f3d728c757436b
Commit:     7c0ff870d1ed287504a61ed865f3d728c757436b
Parent:     0813e22d4e0d618eac9b47bec942bf856adca4c5
Author:     Eric W. Biederman <ebiederm@xmission.com>
AuthorDate: Wed Feb 3 23:13:24 2010 -0800
Committer:  Greg Kroah-Hartman <gregkh@suse.de>
CommitDate: Tue Feb 16 15:42:42 2010 -0800

    sysfs: sysfs_sd_setattr set iattrs unconditionally
    
    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;
 }
--
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
sysfs: sysfs_sd_setattr set iattrs unconditionally, Linux Kernel Mailing ..., (Tue Feb 16, 6:59 pm)