From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mukesh Rathor Subject: [V9 PATCH 7/8] pvh dom0: check for vioapic null ptr in vioapic_range Date: Tue, 15 Apr 2014 17:12:51 -0700 Message-ID: <1397607172-32065-8-git-send-email-mukesh.rathor@oracle.com> References: <1397607172-32065-1-git-send-email-mukesh.rathor@oracle.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mail6.bemta4.messagelabs.com ([85.158.143.247]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1WaDTd-0002qm-NT for xen-devel@lists.xenproject.org; Wed, 16 Apr 2014 00:13:21 +0000 In-Reply-To: <1397607172-32065-1-git-send-email-mukesh.rathor@oracle.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: JBeulich@suse.com, George.Dunlap@eu.citrix.com, tim@xen.org, eddie.dong@intel.com, keir.xen@gmail.com, jun.nakajima@intel.com List-Id: xen-devel@lists.xenproject.org pvh doesn't use apic emulation, as a result vioapic_init is not called and vioapic ptr in struct hvm_domain is not initialized. One path that would access the ptr for pvh is : hvm_hap_nested_page_fault -> handle_mmio -> hvmemul_do_io -> hvm_mmio_intercept -> vioapic_range Signed-off-by: Mukesh Rathor --- xen/arch/x86/hvm/vioapic.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/xen/arch/x86/hvm/vioapic.c b/xen/arch/x86/hvm/vioapic.c index d3c681b..0b343bd 100644 --- a/xen/arch/x86/hvm/vioapic.c +++ b/xen/arch/x86/hvm/vioapic.c @@ -238,10 +238,11 @@ static int vioapic_write( static int vioapic_range(struct vcpu *v, unsigned long addr) { - struct hvm_hw_vioapic *vioapic = domain_vioapic(v->domain); + struct hvm_vioapic *vioapic = v->domain->arch.hvm_domain.vioapic; + struct hvm_hw_vioapic *hwapic = domain_vioapic(v->domain); - return ((addr >= vioapic->base_address && - (addr < vioapic->base_address + VIOAPIC_MEM_LENGTH))); + return (vioapic && (addr >= hwapic->base_address && + (addr < hwapic->base_address + VIOAPIC_MEM_LENGTH))); } const struct hvm_mmio_handler vioapic_mmio_handler = { -- 1.8.3.1