From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 9/24] Implement VMCLEAR Date: Mon, 14 Jun 2010 12:03:45 +0300 Message-ID: <4C15F071.20803@redhat.com> References: <1276431753-nyh@il.ibm.com> <201006131227.o5DCRAB0012968@rice.haifa.ibm.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org To: "Nadav Har'El" Return-path: Received: from mx1.redhat.com ([209.132.183.28]:17261 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755695Ab0FNJDs (ORCPT ); Mon, 14 Jun 2010 05:03:48 -0400 In-Reply-To: <201006131227.o5DCRAB0012968@rice.haifa.ibm.com> Sender: kvm-owner@vger.kernel.org List-ID: On 06/13/2010 03:27 PM, Nadav Har'El wrote: > This patch implements the VMCLEAR instruction. > > + > +/* Emulate the VMCLEAR instruction */ > +static int handle_vmclear(struct kvm_vcpu *vcpu) > +{ > + struct vcpu_vmx *vmx = to_vmx(vcpu); > + gpa_t guest_vmcs_addr, save_current_vmptr; > + > + if (!nested_vmx_check_permission(vcpu)) > + return 1; > + > + if (read_guest_vmcs_gpa(vcpu,&guest_vmcs_addr)) > + return 1; > + > + save_current_vmptr = vmx->nested.current_vmptr; > + > + vmx->nested.current_vmptr = guest_vmcs_addr; > + if (!nested_map_current(vcpu)) > + return 1; > Haven't you leaked current_vmptr here? If I read the code correctly, you are implementing a sort of stack here and pushing the current vmptr into save_current_vmptr. Perhaps it's simper to have an nvmxptr structure which holds a vmptr and a kmap'ed pointer to it, and pass that around to functions. > + vmx->nested.current_l2_page->launch_state = 0; > + nested_unmap_current(vcpu); > + > + nested_free_current_vmcs(vcpu); > + > + if (save_current_vmptr == guest_vmcs_addr) > + vmx->nested.current_vmptr = -1ull; > + else > + vmx->nested.current_vmptr = save_current_vmptr; > + > + skip_emulated_instruction(vcpu); > + clear_rflags_cf_zf(vcpu); > + return 1; > +} > + > -- error compiling committee.c: too many arguments to function