btrfs-progs: fix double free during scanning

If there are different devices mounted to the same directory we can run
into double free issue in the scanning code and this can lead to a
crash. The dev_info_arg buffer allocation get_fs_info might be skipped,
eg. if the FS_INFO ioctl fails due to EPERM in older kernels. Reset the
pointer before each loop starts.

Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
David Sterba 2015-10-02 17:21:12 +02:00
parent afe33bc29b
commit 1491d246c4
1 changed files with 2 additions and 0 deletions

View File

@ -481,6 +481,7 @@ static int btrfs_scan_kernel(void *search, unsigned unit_mode)
if (search && !match_search_item_kernel(fs_info_arg.fsid, if (search && !match_search_item_kernel(fs_info_arg.fsid,
mnt->mnt_dir, label, search)) { mnt->mnt_dir, label, search)) {
kfree(dev_info_arg); kfree(dev_info_arg);
dev_info_arg = NULL;
continue; continue;
} }
@ -496,6 +497,7 @@ static int btrfs_scan_kernel(void *search, unsigned unit_mode)
if (fd != -1) if (fd != -1)
close(fd); close(fd);
kfree(dev_info_arg); kfree(dev_info_arg);
dev_info_arg = NULL;
} }
out: out: