Commit f91192cd authored by Bragatheswaran Manickavel's avatar Bragatheswaran Manickavel Committed by David Sterba
Browse files

btrfs: ref-verify: fix memory leaks in btrfs_ref_tree_mod()



In btrfs_ref_tree_mod(), when !parent 're' was allocated through
kmalloc(). In the following code, if an error occurs, the execution will
be redirected to 'out' or 'out_unlock' and the function will be exited.
However, on some of the paths, 're' are not deallocated and may lead to
memory leaks.

For example: lookup_block_entry() for 'be' returns NULL, the out label
will be invoked. During that flow ref and 'ra' are freed but not 're',
which can potentially lead to a memory leak.

CC: stable@vger.kernel.org # 5.10+
Reported-and-tested-by: default avatar <syzbot+d66de4cbf532749df35f@syzkaller.appspotmail.com>
Closes: https://syzkaller.appspot.com/bug?extid=d66de4cbf532749df35f


Signed-off-by: default avatarBragatheswaran Manickavel <bragathemanick0908@gmail.com>
Reviewed-by: default avatarDavid Sterba <dsterba@suse.com>
Signed-off-by: default avatarDavid Sterba <dsterba@suse.com>
parent 2db31320
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -794,6 +794,7 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info,
			dump_ref_action(fs_info, ra);
			kfree(ref);
			kfree(ra);
			kfree(re);
			goto out_unlock;
		} else if (be->num_refs == 0) {
			btrfs_err(fs_info,
@@ -803,6 +804,7 @@ int btrfs_ref_tree_mod(struct btrfs_fs_info *fs_info,
			dump_ref_action(fs_info, ra);
			kfree(ref);
			kfree(ra);
			kfree(re);
			goto out_unlock;
		}