Received: by 2002:ac0:a679:0:0:0:0:0 with SMTP id p54csp503600imp; Thu, 21 Feb 2019 05:53:24 -0800 (PST) X-Google-Smtp-Source: AHgI3IbCvZ37inURoUUmCHHPwNB5cp0I4uKLODQzoHphhl3Uwhb5uUAuzamzZhBn1y86fX63/3bj X-Received: by 2002:a65:6684:: with SMTP id b4mr34797089pgw.55.1550757204371; Thu, 21 Feb 2019 05:53:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550757204; cv=none; d=google.com; s=arc-20160816; b=HolsNn/JVlNy+a5A2PbyK4YT8M8vmMkDbaZF7sU3HmZPf92tFmJNrMd/2PfHKzZKMn qfarqFqntqtSpm/n2LCnXXXD7B8dTOLxfJOLrbXne441TOu8ufz4RsreOuwdlrKdRJdn tZSZxXSDlU1uCqZZLVrjGejY4hLqk21w9BxjyK/tnQTjvcOZBhAgI0fu5/0E0Oki4zHH FSSxBb4R7HXOY8f0304CJK/f0cCjwhcK9CgV03Da/GYnqWyEQVLLIKH0JNTZ2qHy42uv tMqxVh+ym8dQpaMo2lVrYchJMKS7bSIfNpBYPxOVJm9huGQrKoYQoONiMVifLcAGgGBd vJSg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from; bh=N0TjFnmx+0gwfgQCdPHlQfHT8TvySiPRYXVClXpeoo0=; b=OUIjfv7J1+iXR9oV9BziTO0J441AYlWJxfB00iZwPOLsFP4n4LRHe3EEhxoPA0BRRu YbyF24uMVnFKt4+UZ2DaLr0r5GOtICU2hHp1N0i1+c+y1IxYpDwRd8gwfepHi1XD7SWt EPlEmHMkwtONR0BmsXvkOIlhr+Z1fY6m9CaGk8GnsOnKlPNukiBdxowCxiNRuAz5iYBu 6SEKq/0JjfQ0GILo4ZkE2xQ1PmXwuRTpjf9pCO1ULL5GPje5jejEVHALvaWtu5TupZtj LaxMAWYcwi+RqP5W2qklNZ9XyR/dx3JxPmXiHCc+W1n7ehm2gIMql4VKt6r2yxUrzUo6 mWbw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=8bytes.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c11si19099250pfc.162.2019.02.21.05.53.08; Thu, 21 Feb 2019 05:53:24 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=8bytes.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728228AbfBUNwR (ORCPT + 99 others); Thu, 21 Feb 2019 08:52:17 -0500 Received: from 8bytes.org ([81.169.241.247]:40380 "EHLO theia.8bytes.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725385AbfBUNwR (ORCPT ); Thu, 21 Feb 2019 08:52:17 -0500 Received: by theia.8bytes.org (Postfix, from userid 1000) id 8A0863AA; Thu, 21 Feb 2019 14:52:15 +0100 (CET) From: Joerg Roedel To: Greg Kroah-Hartman , stable@vger.kernel.org Cc: Ben Hutchings , David Woodhouse , Paolo Bonzini , Jim Mattson , linux-kernel@vger.kernel.org, Joerg Roedel Subject: [PATCH stable-4.4.y] KVM: VMX: Fix x2apic check in vmx_msr_bitmap_mode() Date: Thu, 21 Feb 2019 14:52:13 +0100 Message-Id: <20190221135213.23926-1-joro@8bytes.org> X-Mailer: git-send-email 2.17.1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Joerg Roedel The stable backport of upstream commit 904e14fb7cb96 KVM: VMX: make MSR bitmaps per-VCPU has a bug in vmx_msr_bitmap_mode(). It enables the x2apic MSR-bitmap when the kernel emulates x2apic for the guest in software. The upstream version of the commit checkes whether the hardware has virtualization enabled for x2apic emulation. Since KVM emulates x2apic for guests even when the host does not support x2apic in hardware, this causes the intercept of at least the X2APIC_TASKPRI MSR to be disabled on machines not supporting that MSR. The result is undefined behavior, on some machines (Intel Westmere based) it causes a crash of the guest kernel when it tries to access that MSR. Change the check in vmx_msr_bitmap_mode() to match the upstream code. This fixes the guest crashes observed with stable kernels starting with v4.4.168 through v4.4.175. Signed-off-by: Joerg Roedel --- arch/x86/kvm/vmx.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index aee2886a387c..14553f6c03a6 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -4628,7 +4628,9 @@ static u8 vmx_msr_bitmap_mode(struct kvm_vcpu *vcpu) { u8 mode = 0; - if (irqchip_in_kernel(vcpu->kvm) && apic_x2apic_mode(vcpu->arch.apic)) { + if (cpu_has_secondary_exec_ctrls() && + (vmcs_read32(SECONDARY_VM_EXEC_CONTROL) & + SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE)) { mode |= MSR_BITMAP_MODE_X2APIC; if (enable_apicv) mode |= MSR_BITMAP_MODE_X2APIC_APICV; -- 2.16.3