From patchwork Fri Aug 18 18:43:10 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jim Mattson X-Patchwork-Id: 9909769 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 8C99A600CC for ; Fri, 18 Aug 2017 18:43:31 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 7860A28D3F for ; Fri, 18 Aug 2017 18:43:31 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 6D35B28D4D; Fri, 18 Aug 2017 18:43:31 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id B909028D44 for ; Fri, 18 Aug 2017 18:43:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751037AbdHRSnU (ORCPT ); Fri, 18 Aug 2017 14:43:20 -0400 Received: from mail-pg0-f41.google.com ([74.125.83.41]:36907 "EHLO mail-pg0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750971AbdHRSnT (ORCPT ); Fri, 18 Aug 2017 14:43:19 -0400 Received: by mail-pg0-f41.google.com with SMTP id y129so69405086pgy.4 for ; Fri, 18 Aug 2017 11:43:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=v9usCdqcaAng7stUxWI0TQ9KsHXARZzwYBMMGwnMaRQ=; b=Olqi+rZ5OMZgYcJveWOk8uolE2QP0BFLiFWHzrw7lcRpFK010Af1VGNx2qdjB2/P2X KJWNymHNG6nvJTK2p45cjewpYgfljcr1/HKZIyMBU+yIiOAbLxLXFAZfrjyBDwzK89wC 5k2ObOSdIJ9EvnT3s+oL+gSgLiuvscoPZD8in1mB4fjPRlW4lVMRfX4XmiV8tfbeRrwH ls0tBd2vGfqUX3nTBltFqPDMjIU3i4/OakDFDpWj2jXkf8Y6StM0ukmZTuYZ8B90V0jM 2zgns2OPxPt7epq3wnAr4+O5jG4FopmM5AWToCSDNjXW3mu8vPvVAzFetshrAZJkQUEk zefw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=v9usCdqcaAng7stUxWI0TQ9KsHXARZzwYBMMGwnMaRQ=; b=RFlLXtu4GtI4IDYkpHtXkmY4gdvOc8aXfhz6qmR5Xx6J0lDRjilDc2NqGB+iSLYUC5 6u2Aptt54ErSupV4Fml/5y6u+s2gFQoyRRoygtbkJHM3Fgij9B0ToaIhZyOTKz61X87P l/ltuCLdhaiSZrADxiFtRKLPhM36zG/pImSY/nTGACyhKXj2bnyjgT56vzxiAidHfVew AqIME5ePX8J4Iv04YJ7FTIWIthBIhDDRhLj/GkLMGaJj8VDgueXgQmbd0qY5s6CDYaV3 zvYsVGoHhfZ1zqZHMuvuqcCd+DnT+Ov0S+lmKiNtcuvMHUKu+Cvx2OU1ay2XOdFajL5d cCyw== X-Gm-Message-State: AHYfb5jkQyTZ741cUTvNgdAaVjVF/dnARgJv+umRzS4kUrgs6beXGLOS DsN7eB0Rgd4qGfDyOjDQ0g== X-Received: by 10.99.119.10 with SMTP id s10mr9195228pgc.211.1503081798368; Fri, 18 Aug 2017 11:43:18 -0700 (PDT) Received: from turtle.sea.corp.google.com ([172.31.88.24]) by smtp.gmail.com with ESMTPSA id h8sm12027726pfe.81.2017.08.18.11.43.16 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Fri, 18 Aug 2017 11:43:16 -0700 (PDT) From: Jim Mattson To: kvm@vger.kernel.org Cc: Jim Mattson Subject: [PATCH] kvm: vmx: Raise #UD on unsupported RDSEED Date: Fri, 18 Aug 2017 11:43:10 -0700 Message-Id: <20170818184310.117806-1-jmattson@google.com> X-Mailer: git-send-email 2.14.1.480.gb18f417b89-goog Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP A guest may not be configured to support RDSEED, even when the host does. If the guest does not support RDSEED, intercept the instruction and synthesize #UD. --- arch/x86/kvm/vmx.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index ed1074e98b8e..8b9015f081b7 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c @@ -3662,6 +3662,7 @@ static __init int setup_vmcs_config(struct vmcs_config *vmcs_conf) SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | SECONDARY_EXEC_SHADOW_VMCS | SECONDARY_EXEC_XSAVES | + SECONDARY_EXEC_RDSEED_EXITING | SECONDARY_EXEC_ENABLE_PML | SECONDARY_EXEC_TSC_SCALING | SECONDARY_EXEC_ENABLE_VMFUNC; @@ -5298,6 +5299,9 @@ static u32 vmx_secondary_exec_control(struct vcpu_vmx *vmx) if (!enable_pml) exec_control &= ~SECONDARY_EXEC_ENABLE_PML; + if (guest_cpuid_has(&vmx->vcpu, X86_FEATURE_RDSEED)) + exec_control &= ~SECONDARY_EXEC_RDSEED_EXITING; + return exec_control; } @@ -6806,6 +6810,12 @@ static int handle_mwait(struct kvm_vcpu *vcpu) return handle_nop(vcpu); } +static int handle_invalid_op(struct kvm_vcpu *vcpu) +{ + kvm_queue_exception(vcpu, UD_VECTOR); + return 1; +} + static int handle_monitor_trap(struct kvm_vcpu *vcpu) { return 1; @@ -8050,6 +8060,7 @@ static int (*const kvm_vmx_exit_handlers[])(struct kvm_vcpu *vcpu) = { [EXIT_REASON_MONITOR_INSTRUCTION] = handle_monitor, [EXIT_REASON_INVEPT] = handle_invept, [EXIT_REASON_INVVPID] = handle_invvpid, + [EXIT_REASON_RDSEED] = handle_invalid_op, [EXIT_REASON_XSAVES] = handle_xsaves, [EXIT_REASON_XRSTORS] = handle_xrstors, [EXIT_REASON_PML_FULL] = handle_pml_full,