From: Omar Sandoval <osan...@fb.com> In process_clone(), we're not checking the return value of strdup(). But, there's no reason to strdup() in the first place: we just pass the path into path_cat_out(). Get rid of the strdup().
Fixes: f1c24cd80dfd ("Btrfs-progs: add btrfs send/receive commands") Signed-off-by: Omar Sandoval <osan...@osandov.com> --- cmds/receive.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/cmds/receive.c b/cmds/receive.c index b97850a7..a3e62985 100644 --- a/cmds/receive.c +++ b/cmds/receive.c @@ -739,7 +739,7 @@ static int process_clone(const char *path, u64 offset, u64 len, struct btrfs_ioctl_clone_range_args clone_args; struct subvol_info *si = NULL; char full_path[PATH_MAX]; - char *subvol_path = NULL; + char *subvol_path; char full_clone_path[PATH_MAX]; int clone_fd = -1; @@ -760,7 +760,7 @@ static int process_clone(const char *path, u64 offset, u64 len, if (memcmp(clone_uuid, rctx->cur_subvol.received_uuid, BTRFS_UUID_SIZE) == 0) { /* TODO check generation of extent */ - subvol_path = strdup(rctx->cur_subvol_path); + subvol_path = rctx->cur_subvol_path; } else { if (!si) ret = -ENOENT; @@ -794,14 +794,14 @@ static int process_clone(const char *path, u64 offset, u64 len, if (sub_len > root_len && strstr(si->path, rctx->full_root_path) == si->path && si->path[root_len] == '/') { - subvol_path = strdup(si->path + root_len + 1); + subvol_path = si->path + root_len + 1; } else { error("clone: source subvol path %s unreachable from %s", si->path, rctx->full_root_path); goto out; } } else { - subvol_path = strdup(si->path); + subvol_path = si->path; } } @@ -839,7 +839,6 @@ out: free(si->path); free(si); } - free(subvol_path); if (clone_fd != -1) close(clone_fd); return ret; -- 2.22.0