Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp947731imm; Thu, 13 Sep 2018 10:07:21 -0700 (PDT) X-Google-Smtp-Source: ANB0VdbnJA0cMCHT5fELdOj38cPRZ4qF8aosb7/Rpu6CWMLddzBTieKZIgCkJDor6HUrVYFHsh+H X-Received: by 2002:a63:6054:: with SMTP id u81-v6mr8049781pgb.433.1536858441443; Thu, 13 Sep 2018 10:07:21 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536858441; cv=none; d=google.com; s=arc-20160816; b=0U75JrUDSiktjmZsIucfJzlbyHIIPwGSVR13F/VVDCfcwvjva7My5pfusy59WvY7fG HOo3CmmKVjgZm+PtaNnd8GDpMlk3bWBNxW5SedPZLJSFThA8CsEKVG8SKGvR7L0nBCul EjGHVgkS5wvDl69J/IoJyMdyNmIite9uc9M5KaMDps+OfTJu8q+kWY2CfdcWS4AkzxWd VntdHGhOV97F9UZAL9RQI3lYBV6PoHzR60YVoSQE/bbyDtqCmkvQVC+5XoL7fvb+Ncfm AgAGm+2rdbj7XGLF1Gtw1L8HR/16sXkEuhRC7o3AHriv1FwwTrDAUTlmzlipc1ylUnLq s9qQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=+HP9xfsTWuiAOGkM1PG6OLlgWLHIVaxgA6uDezyX090=; b=vHPa+dSAv2VSztMujFlFusUvk+ZEBT3Ej4gmRO+JRLflIkeev39IQ0+VsxuUBU54// a1Bp39JYSKV9diuE9/XC7MVtdlb1ojxOLYETQiM6d75niaUFuiFJU444tRMHWrXqlJUh 3dooyINE0wiRkQzPJOS7fPrkF1qL5fORd/KvBu4s9R6msZ5TCjmMeuXQr6IAyDAVQU75 sNe5fsn1rABED/+T1opJ308/6fRYPWeaoR6wyg1wIhY9kKUifrL5+PaajCWMPETAldF+ p1ZSsem0011frkfN06dhoOzPTmm4lq2KhAbcqZtqSDzuOJ+b8tJTCTKZckQlDPxrTDIE nZlA== 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=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l71-v6si4557561pge.433.2018.09.13.10.07.06; Thu, 13 Sep 2018 10:07:21 -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; 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=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728490AbeIMWQL (ORCPT + 99 others); Thu, 13 Sep 2018 18:16:11 -0400 Received: from mx1.redhat.com ([209.132.183.28]:7238 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727082AbeIMWQK (ORCPT ); Thu, 13 Sep 2018 18:16:10 -0400 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 34D16310E9A9; Thu, 13 Sep 2018 17:05:48 +0000 (UTC) Received: from vitty.brq.redhat.com (unknown [10.43.2.155]) by smtp.corp.redhat.com (Postfix) with ESMTP id C7060608E0; Thu, 13 Sep 2018 17:05:45 +0000 (UTC) From: Vitaly Kuznetsov To: kvm@vger.kernel.org Cc: Paolo Bonzini , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Roman Kagan , "K. Y. Srinivasan" , Haiyang Zhang , Stephen Hemminger , "Michael Kelley (EOSG)" , Jim Mattson , Liran Alon , linux-kernel@vger.kernel.org Subject: [PATCH v5 08/12] x86/kvm/lapic: preserve gfn_to_hva_cache len on cache reinit Date: Thu, 13 Sep 2018 19:05:18 +0200 Message-Id: <20180913170522.24876-9-vkuznets@redhat.com> In-Reply-To: <20180913170522.24876-1-vkuznets@redhat.com> References: <20180913170522.24876-1-vkuznets@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Thu, 13 Sep 2018 17:05:48 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org vcpu->arch.pv_eoi is accessible through both HV_X64_MSR_VP_ASSIST_PAGE and MSR_KVM_PV_EOI_EN so on migration userspace may try to restore them in any order. Values match, however, kvm_lapic_enable_pv_eoi() uses different length: for Hyper-V case it's the whole struct hv_vp_assist_page, for KVM native case it is 8. In case we restore KVM-native MSR last cache will be reinitialized with len=8 so trying to access VP assist page beyond 8 bytes with kvm_read_guest_cached() will fail. Check if we re-initializing cache for the same address and preserve length in case it was greater. Signed-off-by: Vitaly Kuznetsov --- arch/x86/kvm/lapic.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/lapic.c b/arch/x86/kvm/lapic.c index adad933ed538..362a370f9738 100644 --- a/arch/x86/kvm/lapic.c +++ b/arch/x86/kvm/lapic.c @@ -2608,14 +2608,22 @@ int kvm_hv_vapic_msr_read(struct kvm_vcpu *vcpu, u32 reg, u64 *data) int kvm_lapic_enable_pv_eoi(struct kvm_vcpu *vcpu, u64 data, unsigned long len) { u64 addr = data & ~KVM_MSR_ENABLED; + struct gfn_to_hva_cache *ghc = &vcpu->arch.pv_eoi.data; + unsigned long new_len; + if (!IS_ALIGNED(addr, 4)) return 1; vcpu->arch.pv_eoi.msr_val = data; if (!pv_eoi_enabled(vcpu)) return 0; - return kvm_gfn_to_hva_cache_init(vcpu->kvm, &vcpu->arch.pv_eoi.data, - addr, len); + + if (addr == ghc->gpa && len <= ghc->len) + new_len = ghc->len; + else + new_len = len; + + return kvm_gfn_to_hva_cache_init(vcpu->kvm, ghc, addr, new_len); } void kvm_apic_accept_events(struct kvm_vcpu *vcpu) -- 2.14.4