From patchwork Tue May 19 08:11:22 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Felipe Franciosi X-Patchwork-Id: 225533 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-9.8 required=3.0 tests=DKIMWL_WL_MED, DKIM_SIGNED, DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH, MAILING_LIST_MULTI, SIGNED_OFF_BY, SPF_HELO_NONE, SPF_PASS, UNPARSEABLE_RELAY, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 64362C433E0 for ; Tue, 19 May 2020 08:11:24 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 2909B207D8 for ; Tue, 19 May 2020 08:11:24 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=sendgrid.net header.i=@sendgrid.net header.b="jV9LilP4" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726959AbgESILX (ORCPT ); Tue, 19 May 2020 04:11:23 -0400 Received: from o1.dev.nutanix.com ([198.21.4.205]:2588 "EHLO o1.dev.nutanix.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726860AbgESILX (ORCPT ); Tue, 19 May 2020 04:11:23 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sendgrid.net; h=from:subject:mime-version:to:cc:content-transfer-encoding: content-type; s=smtpapi; bh=FyetZpafM/v6XIJbkIYr2RB7YlhXywPDsBHNjztNYEU=; b=jV9LilP4hIzcawYH20i8HqWNol8X/nZtdQwfcS/oscSi3owPPnqwiKr49kkuzPaKCyAl Qt7tHLBnVADXBEpCwTdw6+jr8o3pU0IaUDhw1IYxojxhwivOl/vA2yAjZQL81tDKzs9/Fk 4CBYBxId495E61VR5bR7TsK71zYELPfAA= Received: by filterdrecv-p3iad2-8ddf98858-lwgxm with SMTP id filterdrecv-p3iad2-8ddf98858-lwgxm-19-5EC394AA-1D 2020-05-19 08:11:22.408630125 +0000 UTC m=+4691031.646325677 Received: from debian.localdomain (unknown) by ismtpd0008p1lon1.sendgrid.net (SG) with ESMTP id 6UUgXTmQRF-ABD9SVFhCQg Tue, 19 May 2020 08:11:22.067 +0000 (UTC) From: Felipe Franciosi Subject: [PATCH v2] KVM: x86: respect singlestep when emulating instruction Date: Tue, 19 May 2020 08:11:22 +0000 (UTC) Message-Id: <20200519081048.8204-1-felipe@nutanix.com> X-Mailer: git-send-email 2.20.1 MIME-Version: 1.0 X-SG-EID: W9goRmNI2M6BaZDnSanVWLdj2DuGbkuGfTWZsqFIAk59ONbkkaLXMDCghpkcaIPehS/Luf7/3t083SnZbMEjV/hVoVQYNCU8if+b2hfP+MkdnLaAkF5irJPrTFAwszS9YEc5FrwmrAteU06//ITgah6myXAmbMmxM6C+3EkrrrNN8umvDrKpUsgqrf8itVNQq83Nd5VUYXubrIZC4nnnpo7zFkeL6aTlMiki1gl1BrCxWsmdQtlcSAOJvjHXzRexkus34OK/BJ5k+Fgs20BJag== To: Paolo Bonzini Cc: kvm@vger.kernel.org, stable@vger.kernel.org, Felipe Franciosi Sender: stable-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org When userspace configures KVM_GUESTDBG_SINGLESTEP, KVM will manage the presence of X86_EFLAGS_TF via kvm_set/get_rflags on vcpus. The actual rflag bit is therefore hidden from callers. That includes init_emulate_ctxt() which uses the value returned from kvm_get_flags() to set ctxt->tf. As a result, x86_emulate_instruction() will skip a single step, leaving singlestep_rip stale and not returning to userspace. This resolves the issue by observing the vcpu guest_debug configuration alongside ctxt->tf in x86_emulate_instruction(), performing the single step if set. Signed-off-by: Felipe Franciosi --- arch/x86/kvm/x86.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index c17e6eb9ad43..64cb183636da 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -6919,7 +6919,7 @@ int x86_emulate_instruction(struct kvm_vcpu *vcpu, gpa_t cr2_or_gpa, if (!ctxt->have_exception || exception_type(ctxt->exception.vector) == EXCPT_TRAP) { kvm_rip_write(vcpu, ctxt->eip); - if (r && ctxt->tf) + if (r && (ctxt->tf || (vcpu->guest_debug & KVM_GUESTDBG_SINGLESTEP))) r = kvm_vcpu_do_singlestep(vcpu); if (kvm_x86_ops.update_emulated_instruction) kvm_x86_ops.update_emulated_instruction(vcpu);