squashfs: fix name reading in squashfs_xattr_get
authorPhillip Lougher <phillip@lougher.demon.co.uk>
Sun, 23 May 2010 07:27:42 +0000 (08:27 +0100)
committerPhillip Lougher <phillip@lougher.demon.co.uk>
Sun, 23 May 2010 07:27:42 +0000 (08:27 +0100)
Only read potentially matching names into the target buffer, all
obviously non matching names don't need to be read into the
target buffer.

Signed-off-by: Phillip Lougher <phillip@lougher.demon.co.uk>
fs/squashfs/xattr.c

index 14a2fee..c7655e8 100644 (file)
@@ -145,8 +145,12 @@ static int squashfs_xattr_get(struct inode *inode, int name_index,
                type = le16_to_cpu(entry.type);
                prefix = type & SQUASHFS_XATTR_PREFIX_MASK;
 
-               err = squashfs_read_metadata(sb, target, &start, &offset,
-                                                       name_size);
+               if (prefix == name_index && name_size == name_len)
+                       err = squashfs_read_metadata(sb, target, &start,
+                                               &offset, name_size);
+               else
+                       err = squashfs_read_metadata(sb, NULL, &start,
+                                               &offset, name_size);
                if (err < 0)
                        goto failed;