forked from mirrors/linux
		
	Btrfs: kernel operation should come after user input has been verified
By general rule of thumb there shouldn't be any way that user land could trigger a kernel operation just by sending wrong arguments. Here do commit cleanups after user input has been verified. Signed-off-by: Anand Jain <anand.jain@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
This commit is contained in:
		
							parent
							
								
									12b1c2637b
								
							
						
					
					
						commit
						9e271ae27e
					
				
					 1 changed files with 13 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -327,19 +327,6 @@ int btrfs_dev_replace_start(struct btrfs_root *root,
 | 
			
		|||
	    args->start.tgtdev_name[0] == '\0')
 | 
			
		||||
		return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Here we commit the transaction to make sure commit_total_bytes
 | 
			
		||||
	 * of all the devices are updated.
 | 
			
		||||
	 */
 | 
			
		||||
	trans = btrfs_attach_transaction(root);
 | 
			
		||||
	if (!IS_ERR(trans)) {
 | 
			
		||||
		ret = btrfs_commit_transaction(trans, root);
 | 
			
		||||
		if (ret)
 | 
			
		||||
			return ret;
 | 
			
		||||
	} else if (PTR_ERR(trans) != -ENOENT) {
 | 
			
		||||
		return PTR_ERR(trans);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/* the disk copy procedure reuses the scrub code */
 | 
			
		||||
	mutex_lock(&fs_info->volume_mutex);
 | 
			
		||||
	ret = btrfs_dev_replace_find_srcdev(root, args->start.srcdevid,
 | 
			
		||||
| 
						 | 
				
			
			@ -356,6 +343,19 @@ int btrfs_dev_replace_start(struct btrfs_root *root,
 | 
			
		|||
	if (ret)
 | 
			
		||||
		return ret;
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
	 * Here we commit the transaction to make sure commit_total_bytes
 | 
			
		||||
	 * of all the devices are updated.
 | 
			
		||||
	 */
 | 
			
		||||
	trans = btrfs_attach_transaction(root);
 | 
			
		||||
	if (!IS_ERR(trans)) {
 | 
			
		||||
		ret = btrfs_commit_transaction(trans, root);
 | 
			
		||||
		if (ret)
 | 
			
		||||
			return ret;
 | 
			
		||||
	} else if (PTR_ERR(trans) != -ENOENT) {
 | 
			
		||||
		return PTR_ERR(trans);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	btrfs_dev_replace_lock(dev_replace);
 | 
			
		||||
	switch (dev_replace->replace_state) {
 | 
			
		||||
	case BTRFS_IOCTL_DEV_REPLACE_STATE_NEVER_STARTED:
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue