fs/hfsplus: move xattr_name allocation in hfsplus_getxattr()
authorFabian Frederick <fabf@skynet.be>
Thu, 16 Apr 2015 19:46:58 +0000 (12:46 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Fri, 17 Apr 2015 13:04:04 +0000 (09:04 -0400)
security/trusted/user/osx getxattr did the same
xattr_name initialization. Move that operation in hfsplus_getxattr().

Tested with security/trusted/user getfattr/setfattr

Signed-off-by: Fabian Frederick <fabf@skynet.be>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
fs/hfsplus/xattr.c
fs/hfsplus/xattr.h
fs/hfsplus/xattr_security.c
fs/hfsplus/xattr_trusted.c
fs/hfsplus/xattr_user.c

index d98094a..087f8da 100644 (file)
@@ -560,6 +560,30 @@ failed_getxattr_init:
        return res;
 }
 
+ssize_t hfsplus_getxattr(struct dentry *dentry, const char *name,
+                        void *value, size_t size,
+                        const char *prefix, size_t prefixlen)
+{
+       int res;
+       char *xattr_name;
+
+       if (!strcmp(name, ""))
+               return -EINVAL;
+
+       xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1,
+                            GFP_KERNEL);
+       if (!xattr_name)
+               return -ENOMEM;
+
+       strcpy(xattr_name, prefix);
+       strcpy(xattr_name + prefixlen, name);
+
+       res = __hfsplus_getxattr(dentry->d_inode, xattr_name, value, size);
+       kfree(xattr_name);
+       return res;
+
+}
+
 static inline int can_list(const char *xattr_name)
 {
        if (!xattr_name)
@@ -806,9 +830,6 @@ end_removexattr:
 static int hfsplus_osx_getxattr(struct dentry *dentry, const char *name,
                                        void *buffer, size_t size, int type)
 {
-       char *xattr_name;
-       int res;
-
        if (!strcmp(name, ""))
                return -EINVAL;
 
@@ -818,16 +839,9 @@ static int hfsplus_osx_getxattr(struct dentry *dentry, const char *name,
         */
        if (is_known_namespace(name))
                return -EOPNOTSUPP;
-       xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN
-               + XATTR_MAC_OSX_PREFIX_LEN + 1, GFP_KERNEL);
-       if (!xattr_name)
-               return -ENOMEM;
-       strcpy(xattr_name, XATTR_MAC_OSX_PREFIX);
-       strcpy(xattr_name + XATTR_MAC_OSX_PREFIX_LEN, name);
 
-       res = hfsplus_getxattr(dentry, xattr_name, buffer, size);
-       kfree(xattr_name);
-       return res;
+       return hfsplus_getxattr(dentry, name, buffer, size,
+                               XATTR_MAC_OSX_PREFIX, XATTR_MAC_OSX_PREFIX_LEN);
 }
 
 static int hfsplus_osx_setxattr(struct dentry *dentry, const char *name,
index 288530c..570d406 100644 (file)
@@ -28,15 +28,11 @@ static inline int hfsplus_setxattr(struct dentry *dentry, const char *name,
 }
 
 ssize_t __hfsplus_getxattr(struct inode *inode, const char *name,
-                       void *value, size_t size);
+                          void *value, size_t size);
 
-static inline ssize_t hfsplus_getxattr(struct dentry *dentry,
-                                       const char *name,
-                                       void *value,
-                                       size_t size)
-{
-       return __hfsplus_getxattr(dentry->d_inode, name, value, size);
-}
+ssize_t hfsplus_getxattr(struct dentry *dentry, const char *name,
+                        void *value, size_t size,
+                        const char *prefix, size_t prefixlen);
 
 ssize_t hfsplus_listxattr(struct dentry *dentry, char *buffer, size_t size);
 
index 6ec5e10..e67d528 100644 (file)
 static int hfsplus_security_getxattr(struct dentry *dentry, const char *name,
                                        void *buffer, size_t size, int type)
 {
-       char *xattr_name;
-       int res;
-
-       if (!strcmp(name, ""))
-               return -EINVAL;
-
-       xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1,
-               GFP_KERNEL);
-       if (!xattr_name)
-               return -ENOMEM;
-       strcpy(xattr_name, XATTR_SECURITY_PREFIX);
-       strcpy(xattr_name + XATTR_SECURITY_PREFIX_LEN, name);
-
-       res = hfsplus_getxattr(dentry, xattr_name, buffer, size);
-       kfree(xattr_name);
-       return res;
+       return hfsplus_getxattr(dentry, name, buffer, size,
+                               XATTR_SECURITY_PREFIX,
+                               XATTR_SECURITY_PREFIX_LEN);
 }
 
 static int hfsplus_security_setxattr(struct dentry *dentry, const char *name,
index 3c5f27e..0b7d78f 100644 (file)
 static int hfsplus_trusted_getxattr(struct dentry *dentry, const char *name,
                                        void *buffer, size_t size, int type)
 {
-       char *xattr_name;
-       int res;
-
-       if (!strcmp(name, ""))
-               return -EINVAL;
-
-       xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1,
-               GFP_KERNEL);
-       if (!xattr_name)
-               return -ENOMEM;
-       strcpy(xattr_name, XATTR_TRUSTED_PREFIX);
-       strcpy(xattr_name + XATTR_TRUSTED_PREFIX_LEN, name);
-
-       res = hfsplus_getxattr(dentry, xattr_name, buffer, size);
-       kfree(xattr_name);
-       return res;
+       return hfsplus_getxattr(dentry, name, buffer, size,
+                               XATTR_TRUSTED_PREFIX,
+                               XATTR_TRUSTED_PREFIX_LEN);
 }
 
 static int hfsplus_trusted_setxattr(struct dentry *dentry, const char *name,
index 2b625a5..f8860df 100644 (file)
 static int hfsplus_user_getxattr(struct dentry *dentry, const char *name,
                                        void *buffer, size_t size, int type)
 {
-       char *xattr_name;
-       int res;
-
-       if (!strcmp(name, ""))
-               return -EINVAL;
-
-       xattr_name = kmalloc(NLS_MAX_CHARSET_SIZE * HFSPLUS_ATTR_MAX_STRLEN + 1,
-               GFP_KERNEL);
-       if (!xattr_name)
-               return -ENOMEM;
-       strcpy(xattr_name, XATTR_USER_PREFIX);
-       strcpy(xattr_name + XATTR_USER_PREFIX_LEN, name);
 
-       res = hfsplus_getxattr(dentry, xattr_name, buffer, size);
-       kfree(xattr_name);
-       return res;
+       return hfsplus_getxattr(dentry, name, buffer, size,
+                               XATTR_USER_PREFIX, XATTR_USER_PREFIX_LEN);
 }
 
 static int hfsplus_user_setxattr(struct dentry *dentry, const char *name,