btrfs-progs: fsck-test: case for corrupted dir item name
[platform/upstream/btrfs-progs.git] / uuid-tree.c
index 3a4c48e..8d0b917 100644 (file)
@@ -43,6 +43,7 @@ static int btrfs_uuid_tree_lookup_any(int fd, const u8 *uuid, u8 type,
        struct btrfs_ioctl_search_args search_arg;
        struct btrfs_ioctl_search_header *search_header;
        u32 item_size;
+       __le64 lesubid;
 
        btrfs_uuid_to_key(uuid, &key_objectid, &key_offset);
 
@@ -71,7 +72,7 @@ static int btrfs_uuid_tree_lookup_any(int fd, const u8 *uuid, u8 type,
                goto out;
        }
        search_header = (struct btrfs_ioctl_search_header *)(search_arg.buf);
-       item_size = search_header->len;
+       item_size = btrfs_search_header_len(search_header);
        if ((item_size & (sizeof(u64) - 1)) || item_size == 0) {
                printf("btrfs: uuid item with illegal size %lu!\n",
                       (unsigned long)item_size);
@@ -82,8 +83,8 @@ static int btrfs_uuid_tree_lookup_any(int fd, const u8 *uuid, u8 type,
        }
 
        /* return first stored id */
-       memcpy(subid, search_header + 1, sizeof(*subid));
-       *subid = le64_to_cpu(*subid);
+       memcpy(&lesubid, search_header + 1, sizeof(lesubid));
+       *subid = le64_to_cpu(lesubid);
 
 out:
        return ret;