[PATCH V2 2/2] scripts: dtc: fix memory leak after realloc

From: Maxim Zhukov
Date: Tue Apr 12 2016 - 16:55:28 EST


This commit fixed memory leak after errors realloc.

Signed-off-by: Maxim Zhukov <mussitantesmortem@xxxxxxxxx>
---
scripts/dtc/fdtput.c | 10 +++++++---
1 file changed, 7 insertions(+), 3 deletions(-)

diff --git a/scripts/dtc/fdtput.c b/scripts/dtc/fdtput.c
index f2197f5..1042319 100644
--- a/scripts/dtc/fdtput.c
+++ b/scripts/dtc/fdtput.c
@@ -75,8 +75,9 @@ static int encode_value(struct display_info *disp, char **arg, int arg_count,
char *ptr; /* pointer to current value position */
int len; /* length of this cell/string/byte */
int ival;
- int upto; /* the number of bytes we have written to buf */
+ int upto; /* the number of bytes we have written to buf */
char fmt[3];
+ void *save_ptr = NULL; /* save pointer to realloc */

upto = 0;

@@ -96,12 +97,15 @@ static int encode_value(struct display_info *disp, char **arg, int arg_count,
/* enlarge our value buffer by a suitable margin if needed */
if (upto + len > value_size) {
value_size = (upto + len) + 500;
- value = realloc(value, value_size);
- if (!value) {
+ void *save_ptr = realloc(value, value_size);
+
+ if (!save_ptr) {
+ free(value);
fprintf(stderr, "Out of mmory: cannot alloc "
"%d bytes\n", value_size);
return -1;
}
+ value = save_ptr;
}

ptr = value + upto;
--
2.7.1.1.g3617aa0