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:
parent
afe33bc29b
commit
1491d246c4
|
@ -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:
|
||||||
|
|
Loading…
Reference in New Issue