diff options
-rw-r--r-- | fs/btrfs/disk-io.c | 10 | ||||
-rw-r--r-- | fs/btrfs/tree-checker.c | 6 |
2 files changed, 16 insertions, 0 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 99dfd889b9f7..044981cf6df9 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c | |||
@@ -417,6 +417,16 @@ int btrfs_verify_level_key(struct extent_buffer *eb, int level, | |||
417 | */ | 417 | */ |
418 | if (btrfs_header_generation(eb) > fs_info->last_trans_committed) | 418 | if (btrfs_header_generation(eb) > fs_info->last_trans_committed) |
419 | return 0; | 419 | return 0; |
420 | |||
421 | /* We have @first_key, so this @eb must have at least one item */ | ||
422 | if (btrfs_header_nritems(eb) == 0) { | ||
423 | btrfs_err(fs_info, | ||
424 | "invalid tree nritems, bytenr=%llu nritems=0 expect >0", | ||
425 | eb->start); | ||
426 | WARN_ON(IS_ENABLED(CONFIG_BTRFS_DEBUG)); | ||
427 | return -EUCLEAN; | ||
428 | } | ||
429 | |||
420 | if (found_level) | 430 | if (found_level) |
421 | btrfs_node_key_to_cpu(eb, &found_key, 0); | 431 | btrfs_node_key_to_cpu(eb, &found_key, 0); |
422 | else | 432 | else |
diff --git a/fs/btrfs/tree-checker.c b/fs/btrfs/tree-checker.c index 9645389a1187..43e488f5d063 100644 --- a/fs/btrfs/tree-checker.c +++ b/fs/btrfs/tree-checker.c | |||
@@ -1325,6 +1325,12 @@ static int check_leaf(struct extent_buffer *leaf, bool check_item_data) | |||
1325 | owner); | 1325 | owner); |
1326 | return -EUCLEAN; | 1326 | return -EUCLEAN; |
1327 | } | 1327 | } |
1328 | /* Unknown tree */ | ||
1329 | if (owner == 0) { | ||
1330 | generic_err(leaf, 0, | ||
1331 | "invalid owner, root 0 is not defined"); | ||
1332 | return -EUCLEAN; | ||
1333 | } | ||
1328 | return 0; | 1334 | return 0; |
1329 | } | 1335 | } |
1330 | 1336 | ||