x86, microcode: Free microcode_info struct at end of hypercall.
authorKeir Fraser <keir.fraser@citrix.com>
Tue, 16 Sep 2008 12:49:16 +0000 (13:49 +0100)
committerKeir Fraser <keir.fraser@citrix.com>
Tue, 16 Sep 2008 12:49:16 +0000 (13:49 +0100)
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
xen/arch/x86/microcode.c

index 0d97db531d6e940e8db17cdf7b36dc25d15a3efd..3b7d6a1356d68cf16fe3cad5d1b4d9f6eef1fa08 100644 (file)
@@ -147,10 +147,13 @@ static long do_microcode_update(void *_info)
         info->error = error;
 
     info->cpu = next_cpu(info->cpu, cpu_online_map);
-    if ( info->cpu >= NR_CPUS )
-        return info->error;
+    if ( info->cpu < NR_CPUS )
+        return continue_hypercall_on_cpu(info->cpu, do_microcode_update, info);
+
+    error = info->error;
+    xfree(info);
+    return error;
 
-    return continue_hypercall_on_cpu(info->cpu, do_microcode_update, info);
 }
 
 int microcode_update(XEN_GUEST_HANDLE(const_void) buf, unsigned long len)