Commit acbee9af authored by Filipe Manana's avatar Filipe Manana Committed by David Sterba
Browse files

btrfs: fix transaction handle leak after verity rollback failure



During a verity rollback, if we fail to update the inode or delete the
orphan, we abort the transaction and return without releasing our
transaction handle. Fix that by releasing the handle.

Fixes: 14605409 ("btrfs: initial fsverity support")
Fixes: 70524253 ("btrfs: verity metadata orphan items")
Reviewed-by: default avatarBoris Burkov <boris@bur.io>
Signed-off-by: default avatarFilipe Manana <fdmanana@suse.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent bbc9a6eb
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -451,7 +451,7 @@ static int del_orphan(struct btrfs_trans_handle *trans, struct btrfs_inode *inod
 */
static int rollback_verity(struct btrfs_inode *inode)
{
	struct btrfs_trans_handle *trans;
	struct btrfs_trans_handle *trans = NULL;
	struct btrfs_root *root = inode->root;
	int ret;

@@ -473,6 +473,7 @@ static int rollback_verity(struct btrfs_inode *inode)
	trans = btrfs_start_transaction(root, 2);
	if (IS_ERR(trans)) {
		ret = PTR_ERR(trans);
		trans = NULL;
		btrfs_handle_fs_error(root->fs_info, ret,
			"failed to start transaction in verity rollback %llu",
			(u64)inode->vfs_inode.i_ino);
@@ -490,8 +491,9 @@ static int rollback_verity(struct btrfs_inode *inode)
		btrfs_abort_transaction(trans, ret);
		goto out;
	}
	btrfs_end_transaction(trans);
out:
	if (trans)
		btrfs_end_transaction(trans);
	return ret;
}