diff options
author | Chris Mason <chris.mason@oracle.com> | 2012-02-20 20:53:43 -0500 |
---|---|---|
committer | Chris Mason <chris.mason@oracle.com> | 2012-02-23 10:43:45 -0500 |
commit | a6b0d5c8dbfd428717fc4db4c36757783f391c7b (patch) | |
tree | fc3faaed8b1cf93c7dbe60af4c950be5edd9c8ad /fs/btrfs/disk-io.c | |
parent | fe66a05a06795bd3b788404d69ea7709f46a1609 (diff) | |
download | blackbird-op-linux-a6b0d5c8dbfd428717fc4db4c36757783f391c7b.tar.gz blackbird-op-linux-a6b0d5c8dbfd428717fc4db4c36757783f391c7b.zip |
Btrfs: make sure we update latest_bdev
When we are setting up the mount, we close all the
devices that were not actually part of the metadata we found.
But, we don't make sure that one of those devices wasn't
fs_devices->latest_bdev, which means we can do a use after free
on the one we closed.
This updates latest_bdev as it goes.
Signed-off-by: Chris Mason <chris.mason@oracle.com>
Diffstat (limited to 'fs/btrfs/disk-io.c')
-rw-r--r-- | fs/btrfs/disk-io.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 58d0678dfcba..b801d29f3f10 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -2305,6 +2305,12 @@ struct btrfs_root *open_ctree(struct super_block *sb, btrfs_close_extra_devices(fs_devices); + if (!fs_devices->latest_bdev) { + printk(KERN_CRIT "btrfs: failed to read devices on %s\n", + sb->s_id); + goto fail_tree_roots; + } + retry_root_backup: blocksize = btrfs_level_size(tree_root, btrfs_super_root_level(disk_super)); |