----- Original Message ----- > From: "Sean Christopherson" <sean.j.christopherson@xxxxxxxxx> > To: "Paolo Bonzini" <pbonzini@xxxxxxxxxx>, "Radim Krčmář" <rkrcmar@xxxxxxxxxx> > Cc: kvm@xxxxxxxxxxxxxxx, "Simon Becherer" <simon@xxxxxxxxxxx>, "Iakov Karpov" <srid@xxxxxxxxx>, "Gabriele Balducci" > <balducci@xxxxxxxx>, "Antti Antinoja" <reader@xxxxxxxxxxx>, "Takashi Iwai" <tiwai@xxxxxxxx>, "Jiri Slaby" > <jslaby@xxxxxxxx>, "Greg Kroah-Hartman" <gregkh@xxxxxxxxxxxxxxxxxxx> > Sent: Saturday, April 27, 2019 1:38:46 AM > Subject: [PATCH] KVM: x86: Whitelist port 0x7e for pre-incrementing %rip > > KVM's recent bug fix to update %rip after emulating I/O broke userspace > that relied on the previous behavior of incrementing %rip prior to > exiting to userspace. When running a Windows XP guest on AMD hardware, > Qemu may patch "OUT 0x7E" instructions in reaction to the OUT itself. > Because KVM's old behavior was to increment %rip before exiting to > userspace to handle the I/O, Qemu manually adjusted %rip to account for > the OUT instruction. > > Arguably this is a userspace bug as KVM requires userspace to re-enter > the kernel to complete instruction emulation before taking any other > actions. That being said, this is a bit of a grey area and breaking > userspace that has worked for many years is bad. > > Pre-increment %rip on OUT to port 0x7e before exiting to userspace to > hack around the issue. > > Fixes: 45def77ebf79e ("KVM: x86: update %rip after emulating IO") The patch should probably be tweaked to use the quirks mechanism. I'll post an adjusted version next Monday. Paolo