Skip to content

Commit 0c0ce00

Browse files
fdmananaopsiff
authored andcommitted
btrfs: fix changeset leak on mmap write after failure to reserve metadata
[ Upstream commit 3734352 ] If the call to btrfs_delalloc_reserve_metadata() fails we jump to the 'out_noreserve' label and there we never free the extent_changeset allocated by the previous call to btrfs_check_data_free_space() (if qgroups are enabled). Fix this by calling extent_changeset_free() under the 'out_noreserve' label. Fixes: 6599716 ("btrfs: fix -ENOSPC mmap write failure on NOCOW files/extents") Reported-by: syzbot+2f8aa76e6acc9fce6638@syzkaller.appspotmail.com Link: https://lore.kernel.org/linux-btrfs/693a635a.a70a0220.33cd7b.0029.GAE@google.com/ Reviewed-by: Qu Wenruo <wqu@suse.com> Signed-off-by: Filipe Manana <fdmanana@suse.com> Reviewed-by: David Sterba <dsterba@suse.com> Signed-off-by: David Sterba <dsterba@suse.com> Signed-off-by: Sasha Levin <sashal@kernel.org> (cherry picked from commit 6fd59082b6266a2392fd005009b97f6bcf9912f5) Signed-off-by: Wentao Guan <guanwentao@uniontech.com>
1 parent b096921 commit 0c0ce00

1 file changed

Lines changed: 2 additions & 1 deletion

File tree

fs/btrfs/file.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2018,13 +2018,14 @@ static vm_fault_t btrfs_page_mkwrite(struct vm_fault *vmf)
20182018
else
20192019
btrfs_delalloc_release_space(inode, data_reserved, page_start,
20202020
reserved_space, true);
2021-
extent_changeset_free(data_reserved);
20222021
out_noreserve:
20232022
if (only_release_metadata)
20242023
btrfs_check_nocow_unlock(inode);
20252024

20262025
sb_end_pagefault(inode->vfs_inode.i_sb);
20272026

2027+
extent_changeset_free(data_reserved);
2028+
20282029
if (ret < 0)
20292030
return vmf_error(ret);
20302031

0 commit comments

Comments
 (0)