Re: [PATCH 2/8] btrfs: do not init a reloc root if we aren't relocating

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 4.03.20 г. 18:18 ч., Josef Bacik wrote:
> We previously were checking if the root had a dead root before accessing
> root->reloc_root in order to avoid a UAF type bug.  However this
> scenario happens after we've unset the reloc control, so we would have
> been saved if we'd simply checked for fs_info->reloc_control.  At this
> point during relocation we no longer need to be creating new reloc
> roots, so simply move this check above the reloc_root checks to avoid
> any future races and confusion.
> 
> Signed-off-by: Josef Bacik <josef@xxxxxxxxxxxxxx>


Doesn't this patch essentially obviate the reloc_root_is_dead. W.r.t
->reloc_ctl it's important to note that it's being set under reloc_mutex
which this function is also called under so we are guaranteed consistent
value.

> ---
>  fs/btrfs/relocation.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/btrfs/relocation.c b/fs/btrfs/relocation.c
> index 507361e99316..2141519a9dd0 100644
> --- a/fs/btrfs/relocation.c
> +++ b/fs/btrfs/relocation.c
> @@ -1527,6 +1527,10 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
>  	int clear_rsv = 0;
>  	int ret;
>  
> +	if (!rc || !rc->create_reloc_tree ||
> +	    root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
> +		return 0;
> +
>  	/*
>  	 * The subvolume has reloc tree but the swap is finished, no need to
>  	 * create/update the dead reloc tree
> @@ -1540,10 +1544,6 @@ int btrfs_init_reloc_root(struct btrfs_trans_handle *trans,
>  		return 0;
>  	}
>  
> -	if (!rc || !rc->create_reloc_tree ||
> -	    root->root_key.objectid == BTRFS_TREE_RELOC_OBJECTID)
> -		return 0;
> -
>  	if (!trans->reloc_reserved) {
>  		rsv = trans->block_rsv;
>  		trans->block_rsv = rc->block_rsv;
> 



[Index of Archives]     [Linux Filesystem Development]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux