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 |
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); > }
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 --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); }
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(-)