diff mbox series

btrfs-progs: process_snapshot: don't free ERR

Message ID 20220102015016.48470-1-davispuh@gmail.com (mailing list archive)
State New, archived
Headers show
Series btrfs-progs: process_snapshot: don't free ERR | expand

Commit Message

Dāvis Mosāns Jan. 2, 2022, 1:50 a.m. UTC
When some error happens when trying to search for parent subvolume
then parent_subvol will contain errno so don't try to free that

Crash backtrace would look like:
0  process_snapshot at cmds/receive.c:358
    358		free(parent_subvol->path);
1  0x00005646898aaa67 in read_and_process_cmd at common/send-stream.c:348
2  btrfs_read_and_process_send_stream at common/send-stream.c:525
3  0x00005646898c9b8b in do_receive at cmds/receive.c:1113
4  cmd_receive at cmds/receive.c:1316
5  0x00005646898750b1 in cmd_execute at cmds/commands.h:125
6  main at btrfs.c:405

(gdb) p parent_subvol
$1 = (struct subvol_info *) 0xfffffffffffffffe

Signed-off-by: Dāvis Mosāns <davispuh@gmail.com>
---
 cmds/receive.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Qu Wenruo Jan. 2, 2022, 4:45 a.m. UTC | #1
On 2022/1/2 09:50, Dāvis Mosāns wrote:
> When some error happens when trying to search for parent subvolume
> then parent_subvol will contain errno so don't try to free that
>
> Crash backtrace would look like:
> 0  process_snapshot at cmds/receive.c:358
>      358		free(parent_subvol->path);
> 1  0x00005646898aaa67 in read_and_process_cmd at common/send-stream.c:348
> 2  btrfs_read_and_process_send_stream at common/send-stream.c:525
> 3  0x00005646898c9b8b in do_receive at cmds/receive.c:1113
> 4  cmd_receive at cmds/receive.c:1316
> 5  0x00005646898750b1 in cmd_execute at cmds/commands.h:125
> 6  main at btrfs.c:405
>
> (gdb) p parent_subvol
> $1 = (struct subvol_info *) 0xfffffffffffffffe
>
> Signed-off-by: Dāvis Mosāns <davispuh@gmail.com>

Good catch.

Reviewed-by: Qu Wenruo <wqu@suse.com>

Thanks,
Qu

> ---
>   cmds/receive.c | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/cmds/receive.c b/cmds/receive.c
> index 4d123a1f..d106e554 100644
> --- a/cmds/receive.c
> +++ b/cmds/receive.c
> @@ -354,7 +354,7 @@ static int process_snapshot(const char *path, const u8 *uuid, u64 ctransid,
>   	}
>
>   out:
> -	if (parent_subvol) {
> +	if (!IS_ERR_OR_NULL(parent_subvol)) { >   		free(parent_subvol->path);
>   		free(parent_subvol);
>   	}
David Sterba Jan. 3, 2022, 2:56 p.m. UTC | #2
On Sun, Jan 02, 2022 at 03:50:16AM +0200, Dāvis Mosāns wrote:
> When some error happens when trying to search for parent subvolume
> then parent_subvol will contain errno so don't try to free that
> 
> Crash backtrace would look like:
> 0  process_snapshot at cmds/receive.c:358
>     358		free(parent_subvol->path);
> 1  0x00005646898aaa67 in read_and_process_cmd at common/send-stream.c:348
> 2  btrfs_read_and_process_send_stream at common/send-stream.c:525
> 3  0x00005646898c9b8b in do_receive at cmds/receive.c:1113
> 4  cmd_receive at cmds/receive.c:1316
> 5  0x00005646898750b1 in cmd_execute at cmds/commands.h:125
> 6  main at btrfs.c:405
> 
> (gdb) p parent_subvol
> $1 = (struct subvol_info *) 0xfffffffffffffffe
> 
> Signed-off-by: Dāvis Mosāns <davispuh@gmail.com>

Added to devel, thanks.
diff mbox series

Patch

diff --git a/cmds/receive.c b/cmds/receive.c
index 4d123a1f..d106e554 100644
--- a/cmds/receive.c
+++ b/cmds/receive.c
@@ -354,7 +354,7 @@  static int process_snapshot(const char *path, const u8 *uuid, u64 ctransid,
 	}
 
 out:
-	if (parent_subvol) {
+	if (!IS_ERR_OR_NULL(parent_subvol)) {
 		free(parent_subvol->path);
 		free(parent_subvol);
 	}