瀏覽代碼

btrfs: Verify dir_item in iterate_object_props

Call verify_dir_item before memcmp_extent_buffer reading name from
dir_item.

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>
Su Yue 8 年之前
父節點
當前提交
fbc326159a
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      fs/btrfs/props.c

+ 7 - 0
fs/btrfs/props.c

@@ -164,6 +164,7 @@ static int iterate_object_props(struct btrfs_root *root,
 						 size_t),
 						 size_t),
 				void *ctx)
 				void *ctx)
 {
 {
+	struct btrfs_fs_info *fs_info = root->fs_info;
 	int ret;
 	int ret;
 	char *name_buf = NULL;
 	char *name_buf = NULL;
 	char *value_buf = NULL;
 	char *value_buf = NULL;
@@ -214,6 +215,12 @@ static int iterate_object_props(struct btrfs_root *root,
 			name_ptr = (unsigned long)(di + 1);
 			name_ptr = (unsigned long)(di + 1);
 			data_ptr = name_ptr + name_len;
 			data_ptr = name_ptr + name_len;
 
 
+			if (verify_dir_item(fs_info, leaf,
+					    path->slots[0], di)) {
+				ret = -EIO;
+				goto out;
+			}
+
 			if (name_len <= XATTR_BTRFS_PREFIX_LEN ||
 			if (name_len <= XATTR_BTRFS_PREFIX_LEN ||
 			    memcmp_extent_buffer(leaf, XATTR_BTRFS_PREFIX,
 			    memcmp_extent_buffer(leaf, XATTR_BTRFS_PREFIX,
 						 name_ptr,
 						 name_ptr,