From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] kvm: cleanup CR8 handling Date: Tue, 21 Dec 2010 12:56:34 +0200 Message-ID: <4D1087E2.2000506@redhat.com> References: <1291807635-3583-1-git-send-email-andre.przywara@amd.com> <4D060CB4.9000207@redhat.com> <4D107C76.8000605@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: "kvm@vger.kernel.org" , "mtosatti@redhat.com" To: Andre Przywara Return-path: Received: from mx1.redhat.com ([209.132.183.28]:34608 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750809Ab0LUK4j (ORCPT ); Tue, 21 Dec 2010 05:56:39 -0500 In-Reply-To: <4D107C76.8000605@amd.com> Sender: kvm-owner@vger.kernel.org List-ID: On 12/21/2010 12:07 PM, Andre Przywara wrote: > Avi Kivity wrote: >> On 12/08/2010 01:27 PM, Andre Przywara wrote: >>> The handling of CR8 writes in KVM is currently somewhat cumbersome. >>> This patch makes it look like the other CR register handlers >>> and fixes a possible issue in VMX, where the RIP would be incremented >>> despite an injected #GP. >>> >>> unsigned long kvm_get_cr8(struct kvm_vcpu *vcpu) >>> @@ -4104,7 +4098,7 @@ static int emulator_set_cr(int cr, unsigned >>> long val, struct kvm_vcpu *vcpu) >>> res = kvm_set_cr4(vcpu, mk_cr_64(kvm_read_cr4(vcpu), val)); >>> break; >>> case 8: >>> - res = __kvm_set_cr8(vcpu, val& 0xfUL); >>> + res = kvm_set_cr8(vcpu, val); >>> break; >>> default: >>> vcpu_printf(vcpu, "%s: unexpected cr %u\n", __func__, cr); >> >> Why drop the mask? > Because it is checked in kvm_set_cr8 itself. If it is wrong, the > caller should get a #GP as described in the manual. By masking this > out we would never deliver the #GP to the guest. > Ok. Strictly speaking, this should be in a separate patch, since it fixes a bug, but this is such a minor bug it doesn't matter. I doubt any guest relies on #GP on invalid CR8. -- error compiling committee.c: too many arguments to function