Re: [PATCH] Btrfs: fix clone vs chattr NODATASUM race

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

 



On Mon, Jun 25, 2018 at 01:13:36PM +0300, Nikolay Borisov wrote:
> From: Omar Sandoval <osandov@xxxxxx>
> 
> In btrfs_clone_files(), we must check the NODATASUM flag while the
> inodes are locked. Otherwise, it's possible that btrfs_ioctl_setflags()
> will change the flags after we check and we can end up with a party
> checksummed file.
> 
> The race window is only a few instructions in size, between the if and
> the locks which is:
> 
> 3834         if (S_ISDIR(src->i_mode) || S_ISDIR(inode->i_mode))
> 3835                 return -EISDIR;
> 
> where the setflags must be run and toggle the NODATASUM flag (provided
> the file size is 0).  The clone will block on the inode lock, segflags
> takes the inode lock, changes flags, releases log and clone continues.
> 
> Not impossible but still needs a lot of bad luck to hit unintentionally.
> 
> Fixes: 0e7b824c4ef9 ("Btrfs: don't make a file partly checksummed through file clone")
> CC: stable@xxxxxxxxxxxxxxx # 4.4+
> Signed-off-by: Omar Sandoval <osandov@xxxxxx>
> Reviewed-by: Nikolay Borisov <nborisov@xxxxxxxx>
> Reviewed-by: David Sterba <dsterba@xxxxxxxx>
> [ update changelog ]
> Signed-off-by: David Sterba <dsterba@xxxxxxxx>
> Signed-off-by: Nikolay Borisov <nborisov@xxxxxxxx>
> [ adjusted for 4.4 ]
> ---
> 
> Hello Greg, 
> 
> Here is a fixed version of the above patch for 4.4. 

Next time please let me know what the original git commit id is, that
makes it easier for me to apply.

thanks,

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux