From: Florian Forster Date: Fri, 19 Jun 2015 14:26:53 +0000 (+0200) Subject: turbostat plugin: Fix "Undefined allocation of 0 bytes (CERT MEM04-C; CWE-131)" warning. X-Git-Tag: collectd-5.5.1~95 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;ds=sidebyside;h=83735c8c5d45bade1c968256515293072013e447;p=collectd.git turbostat plugin: Fix "Undefined allocation of 0 bytes (CERT MEM04-C; CWE-131)" warning. --- diff --git a/src/turbostat.c b/src/turbostat.c index 80650dff..42fed52a 100644 --- a/src/turbostat.c +++ b/src/turbostat.c @@ -1253,10 +1253,22 @@ allocate_counters(struct thread_data **threads, struct core_data **cores, struct unsigned int i; unsigned int total_threads, total_cores; + if ((topology.num_threads == 0) + || (topology.num_cores == 0) + || (topology.num_packages == 0)) + { + ERROR ("turbostat plugin: Invalid topology: %u threads, %u cores, %u packages", + topology.num_threads, topology.num_cores, topology.num_packages); + return -1; + } + total_threads = topology.num_threads * topology.num_cores * topology.num_packages; *threads = calloc(total_threads, sizeof(struct thread_data)); if (*threads == NULL) - goto err; + { + ERROR ("turbostat plugin: calloc failed"); + return -1; + } for (i = 0; i < total_threads; ++i) (*threads)[i].cpu_id = topology.max_cpu_id + 1; @@ -1264,21 +1276,22 @@ allocate_counters(struct thread_data **threads, struct core_data **cores, struct total_cores = topology.num_cores * topology.num_packages; *cores = calloc(total_cores, sizeof(struct core_data)); if (*cores == NULL) - goto err_clean_threads; + { + ERROR ("turbostat plugin: calloc failed"); + sfree (threads); + return -1; + } *packages = calloc(topology.num_packages, sizeof(struct pkg_data)); if (*packages == NULL) - goto err_clean_cores; + { + ERROR ("turbostat plugin: calloc failed"); + sfree (cores); + sfree (threads); + return -1; + } return 0; - -err_clean_cores: - free(*cores); -err_clean_threads: - free(*threads); -err: - ERROR("turbostat plugin: Failled to allocate memory for counters"); - return -1; } static void