btrfs-progs: check allocation result in add_clone_source

Resolves-Coverity-CID: 1054894
Reviewed-by: Eric Sandeen <sandeen@redhat.com>
Signed-off-by: David Sterba <dsterba@suse.cz>
master
David Sterba 2014-12-19 16:55:32 +01:00
parent 34350d11c1
commit c4ca5c5f3f
1 changed files with 21 additions and 4 deletions

View File

@ -172,11 +172,16 @@ out:
return ret;
}
static void add_clone_source(struct btrfs_send *s, u64 root_id)
static int add_clone_source(struct btrfs_send *s, u64 root_id)
{
s->clone_sources = realloc(s->clone_sources,
sizeof(*s->clone_sources) * (s->clone_sources_count + 1));
if (!s->clone_sources)
return -ENOMEM;
s->clone_sources[s->clone_sources_count++] = root_id;
return 0;
}
static int write_buf(int fd, const void *buf, int size)
@ -475,7 +480,11 @@ int cmd_send(int argc, char **argv)
goto out;
}
add_clone_source(&send, root_id);
ret = add_clone_source(&send, root_id);
if (ret < 0) {
fprintf(stderr, "ERROR: not enough memory\n");
goto out;
}
subvol_uuid_search_finit(&send.sus);
free(subvol);
subvol = NULL;
@ -575,7 +584,11 @@ int cmd_send(int argc, char **argv)
goto out;
}
add_clone_source(&send, parent_root_id);
ret = add_clone_source(&send, parent_root_id);
if (ret < 0) {
fprintf(stderr, "ERROR: not enough memory\n");
goto out;
}
}
for (i = optind; i < argc; i++) {
@ -671,7 +684,11 @@ int cmd_send(int argc, char **argv)
goto out;
/* done with this subvol, so add it to the clone sources */
add_clone_source(&send, root_id);
ret = add_clone_source(&send, root_id);
if (ret < 0) {
fprintf(stderr, "ERROR: not enough memory\n");
goto out;
}
parent_root_id = 0;
full_send = 0;