Message ID | aa032e11aa2b8667a28a93b90691d6f790711c62.1612449293.git.fdmanana@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: fix extent buffer leak on failure to copy root | expand |
On Thu, Feb 04, 2021 at 02:35:44PM +0000, fdmanana@kernel.org wrote: > From: Filipe Manana <fdmanana@suse.com> > > At btrfs_copy_root(), if the call to btrfs_inc_ref() fails we end up > returning without unlocking and releasing our reference on the extent > buffer named "cow" we previously allocated with btrfs_alloc_tree_block(). > > So fix that by unlocking the extent buffer and dropping our reference on > it before returning. > > Fixes: be20aa9dbadc8c ("Btrfs: Add mount option to turn off data cow") > Signed-off-by: Filipe Manana <fdmanana@suse.com> Added to misc-next, thanks.
diff --git a/fs/btrfs/ctree.c b/fs/btrfs/ctree.c index 95d9bae764ab..d56730a67885 100644 --- a/fs/btrfs/ctree.c +++ b/fs/btrfs/ctree.c @@ -222,6 +222,8 @@ int btrfs_copy_root(struct btrfs_trans_handle *trans, else ret = btrfs_inc_ref(trans, root, cow, 0); if (ret) { + btrfs_tree_unlock(cow); + free_extent_buffer(cow); btrfs_abort_transaction(trans, ret); return ret; }