Received: by 2002:a05:6a10:1287:0:0:0:0 with SMTP id d7csp6902714pxv; Fri, 30 Jul 2021 05:28:57 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwRMqQTvoDFDAKN34c/EyW9kc8b3QaMdOOh/hTc5bnXtViGci5Sov1Ut/XIPNdsAaCpqAy/ X-Received: by 2002:a92:8712:: with SMTP id m18mr27036ild.132.1627648137574; Fri, 30 Jul 2021 05:28:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1627648137; cv=none; d=google.com; s=arc-20160816; b=hJ4gR0orJ5RsBwDJP51Ys3fJy8RuRBtUs1DZQWAFw68Xmy0Jv3stDPP3tXDcE75JA/ PrpKo30kS6XNp6kA3rAcPDCfHqS8/5EJ8tSv2TLhN1DH3FPwlXFRlOUHBf1gkPPX8U2G do1io/uo+JLCn3Do0nazUHpdwGhoBb5wt9aA+YbKEYrhbK+r+1dHH8Z24cvV+eKit4tH jdUXrO41bxbjUsI2p2taxkhBVfN2fejK3Er9ceBtPahSv9bNpP9ISP6ZOg8Jrgtzk9Sr 1g4tJruiPADD7P65xULBRfsZBhp2yMW1eyiDWsLWhseGK6WLZCVIGbOviL3G+5sIoxKI jFyQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=Btthg04Zxziwoq8x7CSj2mL2B/Aj4CJqMYr3UqrVYBw=; b=JTIzFUQPzDwQapRJon8FzLLhVpIIkhrHf8QehraSu6Q5YGyVTS9R2vRsi4Ug7bxMhF NF401n2zwEVb7O0Zwk6Cq2X71+FLo3+TH/nvML+0/qFOD/4YYyaElP8/rTPcg82p7Bkz OhSSzBpfeYtImCFe99a+ePU/5i7m/Yxish08+K6ieS2wQ7ZddLUl8VyMn7I7NvU8JK7Q vSBH9G+urcf/JcU5K6IvPzF4zneYKroiXV0OBfSyBaGyqH9FYUcUPDXpSgbNToGrazEF /l/uef8Id3+FWElOP0QC6i0T0WgcofXsMzkcLOCAP3wFroRWWhisvGCy8grOsbJDqZx3 8hkA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=YYqUNGjw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t11si2143233ilu.68.2021.07.30.05.28.46; Fri, 30 Jul 2021 05:28:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@redhat.com header.s=mimecast20190719 header.b=YYqUNGjw; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238844AbhG3M0v (ORCPT + 99 others); Fri, 30 Jul 2021 08:26:51 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]:29755 "EHLO us-smtp-delivery-124.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238819AbhG3M0t (ORCPT ); Fri, 30 Jul 2021 08:26:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1627648004; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Btthg04Zxziwoq8x7CSj2mL2B/Aj4CJqMYr3UqrVYBw=; b=YYqUNGjwzoc3UfalN+HZ4RGFeZ6B3oebcjIXoKabwlEtN5FHBXAQ/dp31TpzRQ6OqcuPYG /SnmTzca4eJxlgOOvlmv37ol7Ti3OqrN9Nu8+JMMlBaoBlZmEccROmyxqJ6dPzruYHDAeY AHBjp+/TiF8Iuqi7D+4Eh+XU7GLfpSY= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-98-vmUVjCA7MFGL_4rsPIXqFw-1; Fri, 30 Jul 2021 08:26:43 -0400 X-MC-Unique: vmUVjCA7MFGL_4rsPIXqFw-1 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 mimecast-mx01.redhat.com (Postfix) with ESMTPS id 3E18BEC1A0; Fri, 30 Jul 2021 12:26:42 +0000 (UTC) Received: from vitty.brq.redhat.com (unknown [10.40.194.154]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3F6C2779D0; Fri, 30 Jul 2021 12:26:40 +0000 (UTC) From: Vitaly Kuznetsov To: kvm@vger.kernel.org, Paolo Bonzini Cc: Sean Christopherson , Wanpeng Li , Jim Mattson , Siddharth Chandrasekaran , linux-kernel@vger.kernel.org Subject: [PATCH 3/4] KVM: x86: hyper-v: Check if guest is allowed to use XMM registers for hypercall input Date: Fri, 30 Jul 2021 14:26:24 +0200 Message-Id: <20210730122625.112848-4-vkuznets@redhat.com> In-Reply-To: <20210730122625.112848-1-vkuznets@redhat.com> References: <20210730122625.112848-1-vkuznets@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org TLFS states that "Availability of the XMM fast hypercall interface is indicated via the “Hypervisor Feature Identification” CPUID Leaf (0x40000003, see section 2.4.4) ... Any attempt to use this interface when the hypervisor does not indicate availability will result in a #UD fault." Implement the check for 'strict' mode (KVM_CAP_HYPERV_ENFORCE_CPUID). Signed-off-by: Vitaly Kuznetsov --- arch/x86/kvm/hyperv.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c index 2945b93dbadd..0b38f944c6b6 100644 --- a/arch/x86/kvm/hyperv.c +++ b/arch/x86/kvm/hyperv.c @@ -2140,6 +2140,7 @@ static bool hv_check_hypercall_access(struct kvm_vcpu_hv *hv_vcpu, u16 code) int kvm_hv_hypercall(struct kvm_vcpu *vcpu) { + struct kvm_vcpu_hv *hv_vcpu = to_hv_vcpu(vcpu); struct kvm_hv_hcall hc; u64 ret = HV_STATUS_SUCCESS; @@ -2177,13 +2178,21 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu) trace_kvm_hv_hypercall(hc.code, hc.fast, hc.rep_cnt, hc.rep_idx, hc.ingpa, hc.outgpa); - if (unlikely(!hv_check_hypercall_access(to_hv_vcpu(vcpu), hc.code))) { + if (unlikely(!hv_check_hypercall_access(hv_vcpu, hc.code))) { ret = HV_STATUS_ACCESS_DENIED; goto hypercall_complete; } - if (hc.fast && is_xmm_fast_hypercall(&hc)) + if (hc.fast && is_xmm_fast_hypercall(&hc)) { + if (unlikely(hv_vcpu->enforce_cpuid && + !(hv_vcpu->cpuid_cache.features_edx & + HV_X64_HYPERCALL_XMM_INPUT_AVAILABLE))) { + kvm_queue_exception(vcpu, UD_VECTOR); + return 1; + } + kvm_hv_hypercall_read_xmm(&hc); + } switch (hc.code) { case HVCALL_NOTIFY_LONG_SPIN_WAIT: -- 2.31.1