Received: by 2002:a25:86ce:0:0:0:0:0 with SMTP id y14csp2183613ybm; Thu, 23 May 2019 12:44:26 -0700 (PDT) X-Google-Smtp-Source: APXvYqz1cEHHP30ESbcCEv1JKOtrZXrauenL9/tNaZcPVVmAPB/mKT9uYWvuuRh1+WuTl4iu6/5h X-Received: by 2002:a62:87c6:: with SMTP id i189mr108356148pfe.65.1558640666328; Thu, 23 May 2019 12:44:26 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1558640666; cv=none; d=google.com; s=arc-20160816; b=SThK4MjeU+2tZc7fEzct87xa/czKquGGWpou5ytWzU1IVlIYA7ZBmv4c34NKzyBA3K acwymkeVy9f3imlRFFPP+OUlkSvlqKPze+NdXUn+rED6lSQsMMNDIXNwiipzY+hx5w0+ 5RiuMSZRzlzr5ToNk5tyzT0IiWfUbosB3WaknIvdE+Sk1aaqmye91SsfzL9HQcv8nYHU N9X15HTVLtPXDIxegbGVN98CfIJWWxe9xj4UsDxaJ0w7asAX1JBW/lsTQV9J8FOGAKVO xYRYwq45egd2HetD4Ldz4SRhZxdzYSKjVjD5y4TnZm4Uw06AXe044+4wREmT7Cz0xyCP el2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=FspfCwJtlgNG3f4QzO4ryE87/9bojPj9/niFkrpBKUI=; b=bDXEYvBhgro5YaT49o5/E3s/7qTPfJ8c1PHNFdx9wsMjNEVxEbo5JUNZHVBE0iD+/H WL2+dm1k+mC6/E16AztwdAuGhLbWA0wGL1v8TzY8xZEk3tyPu4K7McYSbdYK2pQrCEjf zoju84wSJNuULjBw4YWwEs9DvCUFZ+s8dc9g7yqxBH0vOPjQKcGUmMXDsrc6l7LmSIKg pp9zJTiaDVx//myajVGlOJFXybZLqynOdJcQq06s+gXcHtZwjEu/BE0DoHYNyNotPPVB s1qeOY6Cx/wTaxK3RtJr7v1G1GkSmPLvjbR9sTEGYTuG7U40oXz4bW+VsH5wms1oscm5 boTw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=KUHS9hsM; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t5si522730pgv.164.2019.05.23.12.44.10; Thu, 23 May 2019 12:44:26 -0700 (PDT) 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; dkim=pass header.i=@kernel.org header.s=default header.b=KUHS9hsM; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2390252AbfEWTmV (ORCPT + 99 others); Thu, 23 May 2019 15:42:21 -0400 Received: from mail.kernel.org ([198.145.29.99]:54962 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389747AbfEWTTI (ORCPT ); Thu, 23 May 2019 15:19:08 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id B15A0205ED; Thu, 23 May 2019 19:19:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1558639148; bh=zo4BNT2y5vGThUf1YBTI4tm47+GcKrXMdYgr+k3oHic=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KUHS9hsMhTSISoqAsSQ1IhyM1ZB2UeGuvb93Veqcn9cLtHVCmM3FqBLWitkTTc/I3 CJBYb8rJ9fptANOclPCCm9lcmOLgyiHmE3ihtG6itMq+HvXDbcFLCEqAPGltXcGj60 nYtGuHJb7zCBVymaeiT55WQS/Q4S/aJgS3p3DDZI= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Vitaly Kuznetsov , Paolo Bonzini , Sasha Levin Subject: [PATCH 4.19 095/114] x86: kvm: hyper-v: deal with buggy TLB flush requests from WS2012 Date: Thu, 23 May 2019 21:06:34 +0200 Message-Id: <20190523181739.956056404@linuxfoundation.org> X-Mailer: git-send-email 2.21.0 In-Reply-To: <20190523181731.372074275@linuxfoundation.org> References: <20190523181731.372074275@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org [ Upstream commit da66761c2d93a46270d69001abb5692717495a68 ] It was reported that with some special Multi Processor Group configuration, e.g: bcdedit.exe /set groupsize 1 bcdedit.exe /set maxgroup on bcdedit.exe /set groupaware on for a 16-vCPU guest WS2012 shows BSOD on boot when PV TLB flush mechanism is in use. Tracing kvm_hv_flush_tlb immediately reveals the issue: kvm_hv_flush_tlb: processor_mask 0x0 address_space 0x0 flags 0x2 The only flag set in this request is HV_FLUSH_ALL_VIRTUAL_ADDRESS_SPACES, however, processor_mask is 0x0 and no HV_FLUSH_ALL_PROCESSORS is specified. We don't flush anything and apparently it's not what Windows expects. TLFS doesn't say anything about such requests and newer Windows versions seem to be unaffected. This all feels like a WS2012 bug, which is, however, easy to workaround in KVM: let's flush everything when we see an empty flush request, over-flushing doesn't hurt. Signed-off-by: Vitaly Kuznetsov Signed-off-by: Paolo Bonzini Signed-off-by: Sasha Levin --- arch/x86/kvm/hyperv.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c index 01d209ab5481b..229d996051653 100644 --- a/arch/x86/kvm/hyperv.c +++ b/arch/x86/kvm/hyperv.c @@ -1291,7 +1291,16 @@ static u64 kvm_hv_flush_tlb(struct kvm_vcpu *current_vcpu, u64 ingpa, flush.address_space, flush.flags); sparse_banks[0] = flush.processor_mask; - all_cpus = flush.flags & HV_FLUSH_ALL_PROCESSORS; + + /* + * Work around possible WS2012 bug: it sends hypercalls + * with processor_mask = 0x0 and HV_FLUSH_ALL_PROCESSORS clear, + * while also expecting us to flush something and crashing if + * we don't. Let's treat processor_mask == 0 same as + * HV_FLUSH_ALL_PROCESSORS. + */ + all_cpus = (flush.flags & HV_FLUSH_ALL_PROCESSORS) || + flush.processor_mask == 0; } else { if (unlikely(kvm_read_guest(kvm, ingpa, &flush_ex, sizeof(flush_ex)))) -- 2.20.1