Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1030377AbcDLUzY (ORCPT ); Tue, 12 Apr 2016 16:55:24 -0400 Received: from mail-lf0-f67.google.com ([209.85.215.67]:36839 "EHLO mail-lf0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933667AbcDLUzS (ORCPT ); Tue, 12 Apr 2016 16:55:18 -0400 From: Maxim Zhukov To: linux-kernel@vger.kernel.org Cc: Michal Marek , Rob Herring , Frank Rowand , Grant Likely , Maxim Zhukov , devicetree-compiler@vger.kernel.org Subject: [PATCH V2 2/2] scripts: dtc: fix memory leak after realloc Date: Tue, 12 Apr 2016 23:55:00 +0300 Message-Id: <1460494500-26922-3-git-send-email-mussitantesmortem@gmail.com> X-Mailer: git-send-email 2.7.1.1.g3617aa0 In-Reply-To: <1460494500-26922-1-git-send-email-mussitantesmortem@gmail.com> References: <1460494500-26922-1-git-send-email-mussitantesmortem@gmail.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1326 Lines: 42 This commit fixed memory leak after errors realloc. Signed-off-by: Maxim Zhukov --- 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