btrfs: Check name_len before reading btrfs_get_name
authorSu Yue <suy.fnst@cn.fujitsu.com>
Tue, 6 Jun 2017 09:57:06 +0000 (17:57 +0800)
committerDavid Sterba <dsterba@suse.com>
Wed, 21 Jun 2017 17:16:04 +0000 (19:16 +0200)
In btrfs_get_name, there's btrfs_search_slot and reads name from
inode_ref/root_ref.

Call btrfs_is_name_len_valid in btrfs_get_name.

Signed-off-by: Su Yue <suy.fnst@cn.fujitsu.com>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
fs/btrfs/export.c

index 87144c9f9593823922161c61a687c19ab13e7e71..fa66980726c92ce68c84348ca3154854e97f72ec 100644 (file)
@@ -282,6 +282,11 @@ static int btrfs_get_name(struct dentry *parent, char *name,
                name_len = btrfs_inode_ref_name_len(leaf, iref);
        }
 
+       ret = btrfs_is_name_len_valid(leaf, path->slots[0], name_ptr, name_len);
+       if (!ret) {
+               btrfs_free_path(path);
+               return -EIO;
+       }
        read_extent_buffer(leaf, name, name_ptr, name_len);
        btrfs_free_path(path);