[netfilter-cvslog] r6611 - branches/ulog/ulogd2/src
laforge at netfilter.org
laforge at netfilter.org
Tue May 23 10:45:26 CEST 2006
Author: laforge at netfilter.org
Date: 2006-05-23 10:45:25 +0200 (Tue, 23 May 2006)
New Revision: 6611
Modified:
branches/ulog/ulogd2/src/ulogd.c
Log:
Fix a minor memory leak for stack config statements (Philip Craig)
Modified: branches/ulog/ulogd2/src/ulogd.c
===================================================================
--- branches/ulog/ulogd2/src/ulogd.c 2006-05-23 08:43:31 UTC (rev 6610)
+++ branches/ulog/ulogd2/src/ulogd.c 2006-05-23 08:45:25 UTC (rev 6611)
@@ -609,12 +609,15 @@
if (!buf) {
ulogd_log(ULOGD_ERROR, "");
- return 1;
+ ret = -ENOMEM;
+ goto out_buf;
}
stack = malloc(sizeof(*stack));
- if (!stack)
- return -ENOMEM;
+ if (!stack) {
+ ret = -ENOMEM;
+ goto out_stack;
+ }
INIT_LLIST_HEAD(&stack->list);
ulogd_log(ULOGD_DEBUG, "building new pluginstance stack (%s):\n",
@@ -634,8 +637,8 @@
if (!equals || (equals - tok >= ULOGD_MAX_KEYLEN)) {
ulogd_log(ULOGD_ERROR, "syntax error while parsing `%s'"
"of line `%s'\n", tok, buf);
- free(stack);
- return -EINVAL;
+ ret = -EINVAL;
+ goto out;
}
strncpy(pi_id, tok, ULOGD_MAX_KEYLEN-1);
pi_id[equals-tok] = '\0';
@@ -646,8 +649,8 @@
if (!pl) {
ulogd_log(ULOGD_ERROR, "can't find requested plugin "
"%s\n", plname);
- free(stack);
- return -ENODEV;
+ ret = -ENODEV;
+ goto out;
}
/* allocate */
@@ -656,8 +659,8 @@
ulogd_log(ULOGD_ERROR,
"unable to allocate pluginstance for %s\n",
pi_id);
- free(stack);
- return -ENOMEM;
+ ret = -ENOMEM;
+ goto out;
}
/* FIXME: call constructor routine from end to beginning,
@@ -671,21 +674,27 @@
ret = create_stack_resolve_keys(stack);
if (ret < 0) {
ulogd_log(ULOGD_DEBUG, "destroying stack\n");
- free(stack);
- return ret;
+ goto out;
}
/* PASS 3: start each plugin in stack */
ret = create_stack_start_instances(stack);
if (ret < 0) {
ulogd_log(ULOGD_DEBUG, "destroying stack\n");
- free(stack);
- return ret;
+ goto out;
}
/* add head of pluginstance stack to list of stacks */
llist_add(&stack->stack_list, &ulogd_pi_stacks);
+ free(buf);
return 0;
+
+out:
+ free(stack);
+out_stack:
+ free(buf);
+out_buf:
+ return ret;
}
More information about the netfilter-cvslog
mailing list