diff options
| author | Al Viro <viro@zeniv.linux.org.uk> | 2019-01-26 23:58:00 -0500 |
|---|---|---|
| committer | David Sterba <dsterba@suse.com> | 2019-01-30 12:16:40 -0500 |
| commit | 92900e5160a5444d47dd376bc40066b709fbb5a6 (patch) | |
| tree | 16fe4e2b48d4610448fe00759383ad686838ce08 | |
| parent | 302167c50b32e7fccc98994a91d40ddbbab04e52 (diff) | |
btrfs: fix potential oops in device_list_add
alloc_fs_devices() can return ERR_PTR(-ENOMEM), so dereferencing its
result before the check for IS_ERR() is a bad idea.
Fixes: d1a63002829a4 ("btrfs: add members to fs_devices to track fsid changes")
Reviewed-by: Nikolay Borisov <nborisov@suse.com>
Reviewed-by: Anand Jain <anand.jain@oracle.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Reviewed-by: David Sterba <dsterba@suse.com>
Signed-off-by: David Sterba <dsterba@suse.com>
| -rw-r--r-- | fs/btrfs/volumes.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 3e4f8f88353e..15561926ab32 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c | |||
| @@ -957,11 +957,11 @@ static noinline struct btrfs_device *device_list_add(const char *path, | |||
| 957 | else | 957 | else |
| 958 | fs_devices = alloc_fs_devices(disk_super->fsid, NULL); | 958 | fs_devices = alloc_fs_devices(disk_super->fsid, NULL); |
| 959 | 959 | ||
| 960 | fs_devices->fsid_change = fsid_change_in_progress; | ||
| 961 | |||
| 962 | if (IS_ERR(fs_devices)) | 960 | if (IS_ERR(fs_devices)) |
| 963 | return ERR_CAST(fs_devices); | 961 | return ERR_CAST(fs_devices); |
| 964 | 962 | ||
| 963 | fs_devices->fsid_change = fsid_change_in_progress; | ||
| 964 | |||
| 965 | mutex_lock(&fs_devices->device_list_mutex); | 965 | mutex_lock(&fs_devices->device_list_mutex); |
| 966 | list_add(&fs_devices->fs_list, &fs_uuids); | 966 | list_add(&fs_devices->fs_list, &fs_uuids); |
| 967 | 967 | ||
