From: Sean Christopherson <seanjc@google.com>
To: Sasha Levin <sashal@kernel.org>
Cc: stable@vger.kernel.org,
syzbot+cc2032ba16cc2018ca25@syzkaller.appspotmail.com,
Jim Mattson <jmattson@google.com>
Subject: Re: [PATCH 6.1.y] KVM: x86: Don't (re)check L1 intercepts when completing userspace I/O
Date: Fri, 17 Oct 2025 15:02:27 -0700 [thread overview]
Message-ID: <aPK886wPucs9kdNh@google.com> (raw)
In-Reply-To: <20251013151140.3383954-1-sashal@kernel.org>
On Mon, Oct 13, 2025, Sasha Levin wrote:
> From: Sean Christopherson <seanjc@google.com>
>
> [ Upstream commit e750f85391286a4c8100275516973324b621a269 ]
>
> When completing emulation of instruction that generated a userspace exit
> for I/O, don't recheck L1 intercepts as KVM has already finished that
> phase of instruction execution, i.e. has already committed to allowing L2
> to perform I/O. If L1 (or host userspace) modifies the I/O permission
> bitmaps during the exit to userspace, KVM will treat the access as being
> intercepted despite already having emulated the I/O access.
>
> Pivot on EMULTYPE_NO_DECODE to detect that KVM is completing emulation.
> Of the three users of EMULTYPE_NO_DECODE, only complete_emulated_io() (the
> intended "recipient") can reach the code in question. gp_interception()'s
> use is mutually exclusive with is_guest_mode(), and
> complete_emulated_insn_gp() unconditionally pairs EMULTYPE_NO_DECODE with
> EMULTYPE_SKIP.
>
> The bad behavior was detected by a syzkaller program that toggles port I/O
> interception during the userspace I/O exit, ultimately resulting in a WARN
> on vcpu->arch.pio.count being non-zero due to KVM no completing emulation
> of the I/O instruction.
>
> WARNING: CPU: 23 PID: 1083 at arch/x86/kvm/x86.c:8039 emulator_pio_in_out+0x154/0x170 [kvm]
> Modules linked in: kvm_intel kvm irqbypass
> CPU: 23 UID: 1000 PID: 1083 Comm: repro Not tainted 6.16.0-rc5-c1610d2d66b1-next-vm #74 NONE
> Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 0.0.0 02/06/2015
> RIP: 0010:emulator_pio_in_out+0x154/0x170 [kvm]
> PKRU: 55555554
> Call Trace:
> <TASK>
> kvm_fast_pio+0xd6/0x1d0 [kvm]
> vmx_handle_exit+0x149/0x610 [kvm_intel]
> kvm_arch_vcpu_ioctl_run+0xda8/0x1ac0 [kvm]
> kvm_vcpu_ioctl+0x244/0x8c0 [kvm]
> __x64_sys_ioctl+0x8a/0xd0
> do_syscall_64+0x5d/0xc60
> entry_SYSCALL_64_after_hwframe+0x4b/0x53
> </TASK>
>
> Reported-by: syzbot+cc2032ba16cc2018ca25@syzkaller.appspotmail.com
> Closes: https://lore.kernel.org/all/68790db4.a00a0220.3af5df.0020.GAE@google.com
> Fixes: 8a76d7f25f8f ("KVM: x86: Add x86 callback for intercept check")
> Cc: stable@vger.kernel.org
> Cc: Jim Mattson <jmattson@google.com>
> Link: https://lore.kernel.org/r/20250715190638.1899116-1-seanjc@google.com
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> [ is_guest_mode() was open coded ]
> Signed-off-by: Sasha Levin <sashal@kernel.org>
> ---
Acked-by: Sean Christopherson <seanjc@google.com>
Thanks Sasha!
prev parent reply other threads:[~2025-10-17 22:02 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-10-10 12:35 FAILED: patch "[PATCH] KVM: x86: Don't (re)check L1 intercepts when completing" failed to apply to 6.1-stable tree gregkh
2025-10-13 15:11 ` [PATCH 6.1.y] KVM: x86: Don't (re)check L1 intercepts when completing userspace I/O Sasha Levin
2025-10-17 22:02 ` Sean Christopherson [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=aPK886wPucs9kdNh@google.com \
--to=seanjc@google.com \
--cc=jmattson@google.com \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
--cc=syzbot+cc2032ba16cc2018ca25@syzkaller.appspotmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.