diff mbox series

btrfs: fix extent buffer leak on failure to copy root

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

Commit Message

Filipe Manana Feb. 4, 2021, 2:35 p.m. UTC
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>
---
 fs/btrfs/ctree.c | 2 ++
 1 file changed, 2 insertions(+)

Comments

David Sterba Feb. 4, 2021, 4:08 p.m. UTC | #1
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 mbox series

Patch

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;
 	}