btrfs: Validate child tree block's level and first key
[sfrench/cifs-2.6.git] / fs / btrfs / ref-verify.c
index 171f3cce30e6badc8468abb95e8261f681e11e62..35fab67dcbe8a5a3998e6a8fe5d217fe1256033e 100644 (file)
@@ -579,11 +579,16 @@ static int walk_down_tree(struct btrfs_root *root, struct btrfs_path *path,
 
        while (level >= 0) {
                if (level) {
+                       struct btrfs_key first_key;
+
                        block_bytenr = btrfs_node_blockptr(path->nodes[level],
                                                           path->slots[level]);
                        gen = btrfs_node_ptr_generation(path->nodes[level],
                                                        path->slots[level]);
-                       eb = read_tree_block(fs_info, block_bytenr, gen);
+                       btrfs_node_key_to_cpu(path->nodes[level], &first_key,
+                                             path->slots[level]);
+                       eb = read_tree_block(fs_info, block_bytenr, gen,
+                                            level - 1, &first_key);
                        if (IS_ERR(eb))
                                return PTR_ERR(eb);
                        if (!extent_buffer_uptodate(eb)) {