[dm-devel] [PATCH 04/42] libmultipath: resource leak in read_value_block()
Hannes Reinecke
hare at suse.de
Tue Jan 8 13:53:42 UTC 2013
read_value_block() allocates the vector 'elements', but
doesn't free it on error.
Signed-off-by: Hannes Reinecke <hare at suse.de>
---
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;
}
--
1.7.4.2
More information about the dm-devel
mailing list