Commit e93d06c7 authored by Konrad Rzeszutek Wilk's avatar Konrad Rzeszutek Wilk Committed by Stefan Bader

x86/KVM: Warn user if KVM is loaded SMT and L1TF CPU bug being present.

If the L1TF CPU bug is present we allow the KVM module to be loaded as
the major of users that use Linux and KVM have trusted guests and do not
want a broken setup.

Cloud vendors are the ones that are uncomfortable with CVE 2018-3620 and
as such they are the ones that should set nosmt to one.

Setting 'nosmt' means that the system administrator also needs to
disable SMT (Hyper-threading) in the BIOS, or via the 'nosmt' command line
parameter, or via the /sys/devices/system/cpu/smt/control. See commit
05736e4a ("cpu/hotplug: Provide knobs to control SMT").

Other mitigations are to use task affinity, cpu sets, interrupt binding,
etc - anything to make sure that _only_ the same guests vCPUs are running
on sibling threads.
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>

CVE-2018-3620
CVE-2018-3646

[smb: Added vm_init function to vmx.c, squashed v4, re-
      arranged for v6]
Signed-off-by: default avatarStefan Bader <stefan.bader@canonical.com>
parent 8b27d911
......@@ -1787,6 +1787,12 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
for all guests.
Default is 1 (enabled) if in 64-bit or 32-bit PAE mode.
kvm-intel.nosmt=[KVM,Intel] If the L1TF CPU bug is present (CVE-2018-3620)
and the system has SMT (aka Hyper-Threading) enabled then
don't allow guests to be created.
Default is 0 (allow guests to be created).
kvm-intel.ept= [KVM,Intel] Disable extended page tables
(virtualized MMU) support on capable Intel chips.
Default is 1 (enabled)
......
......@@ -68,6 +68,9 @@ static const struct x86_cpu_id vmx_cpu_id[] = {
};
MODULE_DEVICE_TABLE(x86cpu, vmx_cpu_id);
static bool __read_mostly nosmt;
module_param(nosmt, bool, S_IRUGO);
static bool __read_mostly enable_vpid = 1;
module_param_named(vpid, enable_vpid, bool, 0444);
......@@ -8938,6 +8941,21 @@ static struct kvm_vcpu *vmx_create_vcpu(struct kvm *kvm, unsigned int id)
return ERR_PTR(err);
}
#define L1TF_MSG "SMT enabled with L1TF CPU bug present. Refer to CVE-2018-3620 for details.\n"
static int vmx_vm_init(struct kvm *kvm)
{
if (boot_cpu_has(X86_BUG_L1TF) &&
cpu_smt_control == CPU_SMT_ENABLED) {
if (nosmt) {
pr_err(L1TF_MSG);
return -EOPNOTSUPP;
}
pr_warn(L1TF_MSG);
}
return 0;
}
static void __init vmx_check_processor_compat(void *rtn)
{
struct vmcs_config vmcs_conf;
......@@ -10899,6 +10917,8 @@ static struct kvm_x86_ops vmx_x86_ops = {
.cpu_has_accelerated_tpr = report_flexpriority,
.has_emulated_msr = vmx_has_emulated_msr,
.vm_init = vmx_vm_init,
.vcpu_create = vmx_create_vcpu,
.vcpu_free = vmx_free_vcpu,
.vcpu_reset = vmx_vcpu_reset,
......
......@@ -199,6 +199,7 @@ EXPORT_SYMBOL_GPL(cpu_hotplug_enable);
#ifdef CONFIG_HOTPLUG_SMT
enum cpuhp_smt_control cpu_smt_control __read_mostly = CPU_SMT_ENABLED;
EXPORT_SYMBOL_GPL(cpu_smt_control);
static int __init smt_cmdline_disable(char *str)
{
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment