diff options
author | xypron.glpk@gmx.de <xypron.glpk@gmx.de> | 2017-04-15 13:05:40 +0200 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2017-04-18 10:29:22 -0400 |
commit | ddc6a9de057e0fd0b46ba21d16a50a8d24351ef6 (patch) | |
tree | 4c21bd25dc7cedd6173aebc10e4fcb6614aa8e96 /tools/env | |
parent | 1ecd2a2f0600e61f2edff4fc3dce76f0f6559b67 (diff) | |
download | u-boot-ddc6a9de057e0fd0b46ba21d16a50a8d24351ef6.tar.gz |
tools/env: avoid memory leak in fw_setenv
If realloc fails we should release the old buffer.
Signed-off-by: Heinrich Schuchardt <xypron.glpk@gmx.de>
Reviewed-by: Tom Rini <trini@konsulko.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'tools/env')
-rw-r--r-- | tools/env/fw_env.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/tools/env/fw_env.c b/tools/env/fw_env.c index 299e0c9608..2861656183 100644 --- a/tools/env/fw_env.c +++ b/tools/env/fw_env.c @@ -473,6 +473,7 @@ int fw_setenv(int argc, char *argv[], struct env_opts *opts) int i; size_t len; char *name, **valv; + char *oldval; char *value = NULL; int valc; int ret; @@ -507,11 +508,13 @@ int fw_setenv(int argc, char *argv[], struct env_opts *opts) if (value) value[len - 1] = ' '; + oldval = value; value = realloc(value, len + val_len + 1); if (!value) { fprintf(stderr, "Cannot malloc %zu bytes: %s\n", len, strerror(errno)); + free(oldval); return -1; } |