[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 2/2] x86/microcode: Do not upload microcode if CPUs are offline
This patch is to backport the patch below from linux kernel. commit 30ec26da9967d0d785abc24073129a34c3211777 Author: Ashok Raj <ashok.raj@xxxxxxxxx> Date: Wed Feb 28 11:28:43 2018 +0100 x86/microcode: Do not upload microcode if CPUs are offline Avoid loading microcode if any of the CPUs are offline, and issue a warning. Having different microcode revisions on the system at any time is outright dangerous. [ Borislav: Massage changelog. ] Signed-off-by: Ashok Raj <ashok.raj@xxxxxxxxx> Signed-off-by: Borislav Petkov <bp@xxxxxxx> Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> Tested-by: Tom Lendacky <thomas.lendacky@xxxxxxx> Tested-by: Ashok Raj <ashok.raj@xxxxxxxxx> Reviewed-by: Tom Lendacky <thomas.lendacky@xxxxxxx> Cc: Arjan Van De Ven <arjan.van.de.ven@xxxxxxxxx> Link: http://lkml.kernel.org/r/1519352533-15992-4-git-send-email-ashok.raj@xxxxxxxxx Link: https://lkml.kernel.org/r/20180228102846.13447-5-bp@xxxxxxxxx Signed-off-by: Chao Gao <chao.gao@xxxxxxxxx> Cc: Kevin Tian <kevin.tian@xxxxxxxxx> Cc: Jun Nakajima <jun.nakajima@xxxxxxxxx> Cc: Ashok Raj <ashok.raj@xxxxxxxxx> Cc: Borislav Petkov <bp@xxxxxxx> Cc: Thomas Gleixner <tglx@xxxxxxxxxxxxx> --- xen/arch/x86/microcode.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/xen/arch/x86/microcode.c b/xen/arch/x86/microcode.c index 94c1ca2..25d9112 100644 --- a/xen/arch/x86/microcode.c +++ b/xen/arch/x86/microcode.c @@ -346,16 +346,27 @@ int microcode_update(XEN_GUEST_HANDLE_PARAM(const_void) buf, unsigned long len) if ( microcode_ops == NULL ) return -EINVAL; + /* cpu_online_map must not change. */ + if ( !get_cpu_maps() ) + return -EBUSY; + + if ( num_present_cpus() != num_online_cpus() ) + { + ret = -EINVAL; + printk("Not all CPUs online, aborting microcode update\n"); + goto put; + } + info = xmalloc_bytes(sizeof(*info) + len); if ( info == NULL ) - return -ENOMEM; + { + ret = -ENOMEM; + goto put; + } ret = copy_from_guest(info->buffer, buf, len); if ( ret != 0 ) - { - xfree(info); - return ret; - } + goto err; info->buffer_size = len; info->error = 0; @@ -364,10 +375,7 @@ int microcode_update(XEN_GUEST_HANDLE_PARAM(const_void) buf, unsigned long len) { ret = microcode_ops->start_update(); if ( ret != 0 ) - { - xfree(info); - return ret; - } + goto err; } atomic_set(&info->cpu_in, 0); @@ -393,7 +401,11 @@ int microcode_update(XEN_GUEST_HANDLE_PARAM(const_void) buf, unsigned long len) watchdog_enable(); ret = info->error; + + err: xfree(info); + put: + put_cpu_maps(); return ret; } -- 1.8.3.1 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |