[Libvirt-cim] [PATCH 4/8] ACL: Plug leaks
Chip Vincent
cvincent at linux.vnet.ibm.com
Tue Nov 15 14:05:22 UTC 2011
+1
On 11/03/2011 01:48 PM, Eduardo Lima (Etrunko) wrote:
> From: Eduardo Lima (Etrunko)<eblima at br.ibm.com>
>
> As revealed by Coverity scan report
>
> https://bugzilla.redhat.com/show_bug.cgi?id=728245#c8
> https://bugzilla.redhat.com/attachment.cgi?id=530435
>
> This is the same case that was fixed in commit 57765ed. The function
> cleanup_filter() does not free the variable itself. In future uses, consider
> using cleanup_filters() instead.
>
> Signed-off-by: Eduardo Lima (Etrunko)<eblima at br.ibm.com>
> ---
> libxkutil/acl_parsing.c | 5 ++++-
> src/Virt_AppliedFilterList.c | 8 ++++----
> src/Virt_EntriesInFilterList.c | 2 +-
> src/Virt_FilterEntry.c | 2 +-
> src/Virt_FilterList.c | 6 +++---
> src/Virt_NestedFilterList.c | 17 +++++++----------
> 6 files changed, 20 insertions(+), 20 deletions(-)
>
> diff --git a/libxkutil/acl_parsing.c b/libxkutil/acl_parsing.c
> index 7cde1f0..5b6d7bb 100644
> --- a/libxkutil/acl_parsing.c
> +++ b/libxkutil/acl_parsing.c
> @@ -357,8 +357,10 @@ static int parse_acl_filter(xmlNode *fnode, struct acl_filter *filter)
> if (parse_acl_rule(child, rule) == 0)
> goto err;
>
> - if (append_filter_rule(filter, rule) == 0)
> + if (append_filter_rule(filter, rule) == 0) {
> + cleanup_rule(rule);
> goto err;
> + }
> }
> else if (XSTREQ(child->name, "filterref")) {
> filter_ref = get_attr_value(child, "filter");
> @@ -504,6 +506,7 @@ int get_filters(
> break;
>
> memcpy(&filters[i], filter, sizeof(*filter));
> + free(filter);
> }
>
> *list = filters;
> diff --git a/src/Virt_AppliedFilterList.c b/src/Virt_AppliedFilterList.c
> index 6dad3cb..6567118 100644
> --- a/src/Virt_AppliedFilterList.c
> +++ b/src/Virt_AppliedFilterList.c
> @@ -193,7 +193,7 @@ static CMPIStatus list_to_net(
> if (filter == NULL)
> goto out;
>
> - cleanup_filter(filter);
> + cleanup_filters(&filter, 1);
>
> /* get domains */
> dcount = get_domain_list(conn,&doms);
> @@ -331,7 +331,7 @@ static CMPIStatus net_to_list(
> filter,
> &instance);
>
> - cleanup_filter(filter);
> + cleanup_filters(&filter, 1);
>
> if (instance != NULL)
> inst_list_add(list, instance);
> @@ -515,7 +515,7 @@ static CMPIStatus CreateInstance(
> free(domain_name);
> free(net_name);
>
> - cleanup_filter(filter);
> + cleanup_filters(&filter, 1);
> cleanup_virt_devices(&device, 1);
>
> virDomainFree(dom);
> @@ -625,7 +625,7 @@ static CMPIStatus DeleteInstance(
> free(domain_name);
> free(net_name);
>
> - cleanup_filter(filter);
> + cleanup_filters(&filter, 1);
> cleanup_virt_devices(&device, 1);
>
> virDomainFree(dom);
> diff --git a/src/Virt_EntriesInFilterList.c b/src/Virt_EntriesInFilterList.c
> index 5b95dd3..2c8ac47 100644
> --- a/src/Virt_EntriesInFilterList.c
> +++ b/src/Virt_EntriesInFilterList.c
> @@ -83,7 +83,7 @@ static CMPIStatus list_to_rule(
> }
> }
>
> - cleanup_filter(filter);
> + cleanup_filters(&filter, 1);
>
> out:
> virConnectClose(conn);
> diff --git a/src/Virt_FilterEntry.c b/src/Virt_FilterEntry.c
> index ad87689..acc3d61 100644
> --- a/src/Virt_FilterEntry.c
> +++ b/src/Virt_FilterEntry.c
> @@ -687,7 +687,7 @@ CMPIStatus get_rule_by_ref(
> &s);
> out:
> free(filter_name);
> - cleanup_filter(filter);
> + cleanup_filters(&filter, 1);
> virConnectClose(conn);
>
> return s;
> diff --git a/src/Virt_FilterList.c b/src/Virt_FilterList.c
> index 5df2a92..35d18a9 100644
> --- a/src/Virt_FilterList.c
> +++ b/src/Virt_FilterList.c
> @@ -177,7 +177,7 @@ CMPIStatus get_filter_by_ref(const CMPIBroker *broker,
> s = instance_from_filter(broker, context, reference, filter, instance);
>
> out:
> - cleanup_filter(filter);
> + cleanup_filters(&filter, 1);
> virConnectClose(conn);
>
> return s;
> @@ -320,7 +320,7 @@ static CMPIStatus CreateInstance(
> CU_DEBUG("CreateInstance complete");
>
> out:
> - cleanup_filter(filter);
> + cleanup_filters(&filter, 1);
> virConnectClose(conn);
>
> return s;
> @@ -361,7 +361,7 @@ static CMPIStatus DeleteInstance(
> delete_filter(conn, filter);
>
> out:
> - cleanup_filter(filter);
> + cleanup_filters(&filter, 1);
> virConnectClose(conn);
>
> return s;
> diff --git a/src/Virt_NestedFilterList.c b/src/Virt_NestedFilterList.c
> index a129f01..894cd7c 100644
> --- a/src/Virt_NestedFilterList.c
> +++ b/src/Virt_NestedFilterList.c
> @@ -155,13 +155,11 @@ static CMPIStatus parent_to_child(
> inst_list_add(list, instance);
> }
>
> - cleanup_filter(child_filter);
> -
> - child_filter = NULL;
> + cleanup_filters(&child_filter, 1);
> instance = NULL;
> }
>
> - cleanup_filter(parent_filter);
> + cleanup_filters(&parent_filter, 1);
>
> out:
> virConnectClose(conn);
> @@ -223,10 +221,9 @@ static CMPIStatus child_to_parent(
>
> }
>
> - cleanup_filter(&_list[i]);
> }
>
> - free(_list);
> + cleanup_filters(&_list, count);
>
> out:
> virConnectClose(conn);
> @@ -390,8 +387,8 @@ static CMPIStatus CreateInstance(
> CU_DEBUG("CreateInstance completed");
>
> out:
> - cleanup_filter(parent_filter);
> - cleanup_filter(child_filter);
> + cleanup_filters(&parent_filter, 1);
> + cleanup_filters(&child_filter, 1);
> virConnectClose(conn);
>
> return s;
> @@ -481,8 +478,8 @@ static CMPIStatus DeleteInstance(
> CU_DEBUG("CreateInstance completed");
>
> out:
> - cleanup_filter(parent_filter);
> - cleanup_filter(child_filter);
> + cleanup_filters(&parent_filter, 1);
> + cleanup_filters(&child_filter, 1);
> virConnectClose(conn);
>
> return s;
--
Chip Vincent
Open Virtualization
IBM Linux Technology Center
cvincent at linux.vnet.ibm.com
More information about the Libvirt-cim
mailing list