From mboxrd@z Thu Jan 1 00:00:00 1970 From: Keir Fraser Subject: Re: [Xen HV PATCH] VT-d: Fix resource leaks on error paths Date: Thu, 12 May 2011 09:11:36 +0100 Message-ID: References: <1305114354-14907-1-git-send-email-imammedo@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="US-ASCII" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1305114354-14907-1-git-send-email-imammedo@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xensource.com Errors-To: xen-devel-bounces@lists.xensource.com To: Igor Mammedov , xen-devel@lists.xensource.com Cc: "Kay, Allen M" , rhkernel-list@redhat.com List-Id: xen-devel@lists.xenproject.org Will need an Ack from a VT-d maintainer (Allen Kay is listed in our MAINTAINERS file, and is CC'ed). Also needs a Signed-off-by line. -- Keir On 11/05/2011 12:45, "Igor Mammedov" wrote: > On error exit from function, maped pages should be unmapped > and acquired locks released. > > diff -r 4b0692880dfa -r da93d9e43b3c xen/drivers/passthrough/vtd/intremap.c > --- a/xen/drivers/passthrough/vtd/intremap.c Thu May 05 17:40:34 2011 +0100 > +++ b/xen/drivers/passthrough/vtd/intremap.c Wed May 11 12:29:54 2011 +0200 > @@ -210,7 +210,8 @@ > if ( iremap_entries ) > unmap_vtd_domain_page(iremap_entries); > > - ir_ctrl->iremap_num++; > + if ( i < IREMAP_ENTRY_NR ) > + ir_ctrl->iremap_num++; > return i; > } > > @@ -246,6 +247,8 @@ > dprintk(XENLOG_ERR VTDPREFIX, > "%s: index (%d) get an empty entry!\n", > __func__, index); > + unmap_vtd_domain_page(iremap_entries); > + spin_unlock_irqrestore(&ir_ctrl->iremap_lock, flags); > return -EFAULT; > } > > @@ -281,7 +284,8 @@ > if ( index < 0 ) > { > index = alloc_remap_entry(iommu); > - apic_pin_2_ir_idx[apic][ioapic_pin] = index; > + if ( index < IREMAP_ENTRY_NR ) > + apic_pin_2_ir_idx[apic][ioapic_pin] = index; > } > > if ( index > IREMAP_ENTRY_NR - 1 ) > @@ -546,6 +550,8 @@ > dprintk(XENLOG_ERR VTDPREFIX, > "%s: index (%d) get an empty entry!\n", > __func__, index); > + unmap_vtd_domain_page(iremap_entries); > + spin_unlock_irqrestore(&ir_ctrl->iremap_lock, flags); > return -EFAULT; > } > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel