diff options
Diffstat (limited to 'fs/btrfs/ioctl.c')
| -rw-r--r-- | fs/btrfs/ioctl.c | 12 | 
1 files changed, 8 insertions, 4 deletions
| diff --git a/fs/btrfs/ioctl.c b/fs/btrfs/ioctl.c index d6715c2bcdc4..6c7a49faf4e0 100644 --- a/fs/btrfs/ioctl.c +++ b/fs/btrfs/ioctl.c @@ -2773,9 +2773,9 @@ static long btrfs_ioctl_fs_info(struct btrfs_fs_info *fs_info,  	}  	mutex_unlock(&fs_devices->device_list_mutex); -	fi_args->nodesize = fs_info->super_copy->nodesize; -	fi_args->sectorsize = fs_info->super_copy->sectorsize; -	fi_args->clone_alignment = fs_info->super_copy->sectorsize; +	fi_args->nodesize = fs_info->nodesize; +	fi_args->sectorsize = fs_info->sectorsize; +	fi_args->clone_alignment = fs_info->sectorsize;  	if (copy_to_user(arg, fi_args, sizeof(*fi_args)))  		ret = -EFAULT; @@ -3032,7 +3032,7 @@ static int btrfs_cmp_data_prepare(struct inode *src, u64 loff,  out:  	if (ret)  		btrfs_cmp_data_free(cmp); -	return 0; +	return ret;  }  static int btrfs_cmp_data(u64 len, struct cmp_pages *cmp) @@ -4061,6 +4061,10 @@ static long btrfs_ioctl_default_subvol(struct file *file, void __user *argp)  		ret = PTR_ERR(new_root);  		goto out;  	} +	if (!is_fstree(new_root->objectid)) { +		ret = -ENOENT; +		goto out; +	}  	path = btrfs_alloc_path();  	if (!path) { |