Message ID | 20220107072430.GE22086@kili (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | btrfs: fix double unlock bugs in btrfs_compare_trees() | expand |
On Fri, Jan 07, 2022 at 10:24:30AM +0300, Dan Carpenter wrote: > These error paths unlock before the goto, but the goto also unlocks > so it's a double unlock. There's also the case where there's an unlock without a previous lock. I've just sent out a different version of the patch that fixes that as well: https://lore.kernel.org/linux-btrfs/a7b1b2094bb0697dda72bdd9bf1ed789cb0b9b08.1641550850.git.fdmanana@suse.com/ Thanks. > > Fixes: 5646ffa863d0 ("btrfs: make send work with concurrent block group relocation") > Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> > --- > fs/btrfs/send.c | 2 -- > 1 file changed, 2 deletions(-) > > diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c > index 3fc144b8c0d8..1aa8a0998673 100644 > --- a/fs/btrfs/send.c > +++ b/fs/btrfs/send.c > @@ -7152,7 +7152,6 @@ static int btrfs_compare_trees(struct btrfs_root *left_root, > left_path->nodes[left_level] = > btrfs_clone_extent_buffer(left_root->commit_root); > if (!left_path->nodes[left_level]) { > - up_read(&fs_info->commit_root_sem); > ret = -ENOMEM; > goto out; > } > @@ -7162,7 +7161,6 @@ static int btrfs_compare_trees(struct btrfs_root *left_root, > right_path->nodes[right_level] = > btrfs_clone_extent_buffer(right_root->commit_root); > if (!right_path->nodes[right_level]) { > - up_read(&fs_info->commit_root_sem); > ret = -ENOMEM; > goto out; > } > -- > 2.20.1 >
On Fri, Jan 07, 2022 at 10:26:33AM +0000, Filipe Manana wrote: > On Fri, Jan 07, 2022 at 10:24:30AM +0300, Dan Carpenter wrote: > > These error paths unlock before the goto, but the goto also unlocks > > so it's a double unlock. > > There's also the case where there's an unlock without a previous lock. > I've just sent out a different version of the patch that fixes that as well: > > https://lore.kernel.org/linux-btrfs/a7b1b2094bb0697dda72bdd9bf1ed789cb0b9b08.1641550850.git.fdmanana@suse.com/ Ah! Thanks. regards, dan carpenter
diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index 3fc144b8c0d8..1aa8a0998673 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7152,7 +7152,6 @@ static int btrfs_compare_trees(struct btrfs_root *left_root, left_path->nodes[left_level] = btrfs_clone_extent_buffer(left_root->commit_root); if (!left_path->nodes[left_level]) { - up_read(&fs_info->commit_root_sem); ret = -ENOMEM; goto out; } @@ -7162,7 +7161,6 @@ static int btrfs_compare_trees(struct btrfs_root *left_root, right_path->nodes[right_level] = btrfs_clone_extent_buffer(right_root->commit_root); if (!right_path->nodes[right_level]) { - up_read(&fs_info->commit_root_sem); ret = -ENOMEM; goto out; }
These error paths unlock before the goto, but the goto also unlocks so it's a double unlock. Fixes: 5646ffa863d0 ("btrfs: make send work with concurrent block group relocation") Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> --- fs/btrfs/send.c | 2 -- 1 file changed, 2 deletions(-)