]> xenbits.xensource.com Git - xen.git/commitdiff
x86/microcode: Add missing unlock in microcode_update_helper()
authorAlejandro Vallejo <alejandro.vallejo@cloud.com>
Mon, 17 Jul 2023 06:28:19 +0000 (08:28 +0200)
committerJan Beulich <jbeulich@suse.com>
Mon, 17 Jul 2023 06:28:19 +0000 (08:28 +0200)
microcode_update_helper() may return early while holding
cpu_add_remove_lock, hence preventing any writers from taking it again.

Leave through the `put` label instead so it's properly released.

Fixes: 5ed12565aa32 ("microcode: rendezvous CPUs in NMI handler and load ucode")
Signed-off-by: Alejandro Vallejo <alejandro.vallejo@cloud.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: b35b22acb887f682efe8385b3df165220bc84c86
master date: 2023-06-05 16:11:10 +0100

xen/arch/x86/cpu/microcode/core.c

index c760723e4f4edf47bcfd6fa7b9361521ddeae39e..b204b95f8fec384a955e66b71d3f9e8c8dfdea5b 100644 (file)
@@ -596,7 +596,8 @@ static long cf_check microcode_update_helper(void *data)
         printk(XENLOG_WARNING
                "CPU%u is expected to lead ucode loading (but got CPU%u)\n",
                nmi_cpu, cpumask_first(&cpu_online_map));
-        return -EPERM;
+        ret = -EPERM;
+        goto put;
     }
 
     patch = parse_blob(buffer->buffer, buffer->len);