diff options
author | David Sterba <dsterba@suse.cz> | 2014-12-19 16:55:32 +0100 |
---|---|---|
committer | David Sterba <dsterba@suse.cz> | 2014-12-19 18:04:25 +0100 |
commit | c4ca5c5f3f9bc4ccd25c4a640bd7052d8a0c2e67 (patch) | |
tree | f25b8773730241bb89439d929640a8e6e211cdbd /cmds-send.c | |
parent | 34350d11c1bf0723206972175f1f18b7e8840377 (diff) |
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>
Diffstat (limited to 'cmds-send.c')
-rw-r--r-- | cmds-send.c | 25 |
1 files changed, 21 insertions, 4 deletions
diff --git a/cmds-send.c b/cmds-send.c index b17b5e2c..9b32c1f0 100644 --- a/cmds-send.c +++ b/cmds-send.c @@ -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; |