From patchwork Tue Jan 8 13:53:42 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hannes Reinecke X-Patchwork-Id: 1946281 Return-Path: X-Original-To: patchwork-dm-devel@patchwork.kernel.org Delivered-To: patchwork-process-083081@patchwork2.kernel.org Received: from mx3-phx2.redhat.com (mx3-phx2.redhat.com [209.132.183.24]) by patchwork2.kernel.org (Postfix) with ESMTP id D591CDF23A for ; Tue, 8 Jan 2013 14:00:13 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by mx3-phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r08Dtl4f002177; Tue, 8 Jan 2013 08:55:47 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id r08DsUoQ004544 for ; Tue, 8 Jan 2013 08:54:30 -0500 Received: from mx1.redhat.com (ext-mx12.extmail.prod.ext.phx2.redhat.com [10.5.110.17]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id r08DsUKm024499 for ; Tue, 8 Jan 2013 08:54:30 -0500 Received: from mx2.suse.de (cantor2.suse.de [195.135.220.15]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id r08DsSiv010001 for ; Tue, 8 Jan 2013 08:54:28 -0500 Received: from relay2.suse.de (unknown [195.135.220.254]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by mx2.suse.de (Postfix) with ESMTP id BDD74A3E1C; Tue, 8 Jan 2013 14:54:27 +0100 (CET) From: Hannes Reinecke To: Christophe Varoqui Date: Tue, 8 Jan 2013 14:53:42 +0100 Message-Id: <1357653259-62650-5-git-send-email-hare@suse.de> In-Reply-To: <1357653259-62650-1-git-send-email-hare@suse.de> References: <1357653259-62650-1-git-send-email-hare@suse.de> X-RedHat-Spam-Score: -7.299 (BAYES_00, DCC_REPUT_00_12, RCVD_IN_DNSWL_HI, RP_MATCHES_RCVD) X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 X-Scanned-By: MIMEDefang 2.68 on 10.5.110.17 X-loop: dm-devel@redhat.com Cc: dm-devel@redhat.com Subject: [dm-devel] [PATCH 04/42] libmultipath: resource leak in read_value_block() X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk Reply-To: device-mapper development List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com read_value_block() allocates the vector 'elements', but doesn't free it on error. Signed-off-by: Hannes Reinecke --- libmultipath/parser.c | 32 +++++++++++++++++--------------- 1 files changed, 17 insertions(+), 15 deletions(-) diff --git a/libmultipath/parser.c b/libmultipath/parser.c index 79c2d22..526c45b 100644 --- a/libmultipath/parser.c +++ b/libmultipath/parser.c @@ -311,8 +311,10 @@ read_value_block(void) buf = (char *) MALLOC(MAXBUF); - if (!buf) + if (!buf) { + vector_free(elements); return NULL; + } while (read_line(buf, MAXBUF)) { vec = alloc_strvec(buf); @@ -323,21 +325,20 @@ read_value_block(void) break; } - if (VECTOR_SIZE(vec)) - for (i = 0; i < VECTOR_SIZE(vec); i++) { - str = VECTOR_SLOT(vec, i); - dup = (char *) MALLOC(strlen(str) + 1); - if (!dup) - goto out; - memcpy(dup, str, strlen(str)); - - if (!vector_alloc_slot(elements)) { - free_strvec(vec); - goto out1; - } + for (i = 0; i < VECTOR_SIZE(vec); i++) { + str = VECTOR_SLOT(vec, i); + dup = (char *) MALLOC(strlen(str) + 1); + if (!dup) + goto out; + memcpy(dup, str, strlen(str)); - vector_set_slot(elements, dup); + if (!vector_alloc_slot(elements)) { + free_strvec(vec); + goto out1; } + + vector_set_slot(elements, dup); + } free_strvec(vec); } memset(buf, 0, MAXBUF); @@ -348,6 +349,7 @@ out1: FREE(dup); out: FREE(buf); + vector_free(elements); return NULL; }