]> xenbits.xensource.com Git - xen.git/commitdiff
tools/libxl: Fix memory leak in libxl_cpuid_set()
authorAndrew Cooper <andrew.cooper3@citrix.com>
Fri, 12 Jun 2020 17:32:27 +0000 (18:32 +0100)
committerIan Jackson <ian.jackson@eu.citrix.com>
Mon, 15 Jun 2020 14:44:37 +0000 (15:44 +0100)
xc_cpuid_set() returns allocated memory via cpuid_res, which libxl needs to
free() seeing as it discards the results.

This is logically a backport of c/s b91825f628 "tools/libxc: Drop
config_transformed parameter from xc_cpuid_set()" but rewritten as one caller
of xc_cpuid_set() does use returned values.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
tools/libxl/libxl_cpuid.c

index a78f08b9277e1d4f5564543c6270153fa2f6622a..083869dcf4a7b60f9294666dc07bfb6e753b947f 100644 (file)
@@ -420,12 +420,17 @@ void libxl_cpuid_apply_policy(libxl_ctx *ctx, uint32_t domid)
 void libxl_cpuid_set(libxl_ctx *ctx, uint32_t domid,
                      libxl_cpuid_policy_list cpuid)
 {
-    int i;
+    int i, j;
     char *cpuid_res[4];
 
     for (i = 0; cpuid[i].input[0] != XEN_CPUID_INPUT_UNUSED; i++)
+    {
         xc_cpuid_set(ctx->xch, domid, cpuid[i].input,
                      (const char**)(cpuid[i].policy), cpuid_res);
+
+        for (j = 0; j < ARRAY_SIZE(cpuid_res); ++j)
+            free(cpuid_res[j]);
+    }
 }
 
 static const char *input_names[2] = { "leaf", "subleaf" };