lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20220615025114.GB7808@gao-cwp>
Date:   Wed, 15 Jun 2022 10:51:19 +0800
From:   Chao Gao <chao.gao@...el.com>
To:     Kechen Lu <kechenl@...dia.com>
Cc:     kvm@...r.kernel.org, pbonzini@...hat.com, seanjc@...gle.com,
        vkuznets@...hat.com, somduttar@...dia.com,
        linux-kernel@...r.kernel.org
Subject: Re: [RFC PATCH v3 4/7] KVM: x86: Let userspace re-enable previously
 disabled exits

On Tue, Jun 14, 2022 at 06:16:19PM -0700, Kechen Lu wrote:
>From: Sean Christopherson <seanjc@...gle.com>
>
>Add an OVERRIDE flag to KVM_CAP_X86_DISABLE_EXITS allow userspace to
>re-enable exits and/or override previous settings.  There's no real use
>case for the the per-VM ioctl, but a future per-vCPU variant wants to let
>userspace toggle interception while the vCPU is running; add the OVERRIDE
>functionality now to provide consistent between between the per-VM and
>per-vCPU variants.
>
>Signed-off-by: Sean Christopherson <seanjc@...gle.com>
>---
> Documentation/virt/kvm/api.rst |  5 +++++
> arch/x86/kvm/x86.c             | 39 +++++++++++++++++++++++-----------
> include/uapi/linux/kvm.h       |  4 +++-
> 3 files changed, 35 insertions(+), 13 deletions(-)
>
>diff --git a/Documentation/virt/kvm/api.rst b/Documentation/virt/kvm/api.rst
>index d0d8749591a8..89e13b6783b5 100644
>--- a/Documentation/virt/kvm/api.rst
>+++ b/Documentation/virt/kvm/api.rst
>@@ -6941,6 +6941,7 @@ Valid bits in args[0] are::
>   #define KVM_X86_DISABLE_EXITS_HLT              (1 << 1)
>   #define KVM_X86_DISABLE_EXITS_PAUSE            (1 << 2)
>   #define KVM_X86_DISABLE_EXITS_CSTATE           (1 << 3)
>+  #define KVM_X86_DISABLE_EXITS_OVERRIDE         (1ull << 63)
> 
> Enabling this capability on a VM provides userspace with a way to no
> longer intercept some instructions for improved latency in some
>@@ -6949,6 +6950,10 @@ physical CPUs.  More bits can be added in the future; userspace can
> just pass the KVM_CHECK_EXTENSION result to KVM_ENABLE_CAP to disable
> all such vmexits.
> 
>+By default, this capability only disables exits.  To re-enable an exit, or to
>+override previous settings, userspace can set KVM_X86_DISABLE_EXITS_OVERRIDE,
>+in which case KVM will enable/disable according to the mask (a '1' == disable).
>+
> Do not enable KVM_FEATURE_PV_UNHALT if you disable HLT exits.
> 
> 7.14 KVM_CAP_S390_HPAGE_1M
>diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
>index f31ebbb1b94f..7cc8ac550bc7 100644
>--- a/arch/x86/kvm/x86.c
>+++ b/arch/x86/kvm/x86.c
>@@ -4201,11 +4201,10 @@ static inline bool kvm_can_mwait_in_guest(void)
> 
> static u64 kvm_get_allowed_disable_exits(void)
> {
>-	u64 r = KVM_X86_DISABLE_EXITS_HLT | KVM_X86_DISABLE_EXITS_PAUSE |
>-		KVM_X86_DISABLE_EXITS_CSTATE;
>+	u64 r = KVM_X86_DISABLE_VALID_EXITS;
> 
>-	if(kvm_can_mwait_in_guest())
>-		r |= KVM_X86_DISABLE_EXITS_MWAIT;
>+	if (!kvm_can_mwait_in_guest())
>+		r &= ~KVM_X86_DISABLE_EXITS_MWAIT;

This hunk looks like a fix to patch 3; it can be squashed into that patch.

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ