Igor Mammedov
2011-May-11 11:45 UTC
[Xen-devel] [Xen HV PATCH] VT-d: Fix resource leaks on error paths
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
Keir Fraser
2011-May-12 08:11 UTC
Re: [Xen-devel] [Xen HV PATCH] VT-d: Fix resource leaks on error paths
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" <imammedo@redhat.com> 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_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Igor Mammedov
2011-May-12 08:26 UTC
Re: [Xen-devel] [Xen HV PATCH] VT-d: Fix resource leaks on error paths
Thanks Keir, I''ll repost patch and cc Allen On 05/12/2011 10:11 AM, Keir Fraser wrote:> 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"<imammedo@redhat.com> 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 >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Igor Mammedov
2011-May-12 08:30 UTC
[Xen-devel] [Xen HV PATCH] VT-d: Fix resource leaks on error paths
On error exit from functions, maped pages should be unmapped and acquired locks released. Signed-off-by: Igor Mammedov <imammedo@redhat.com> 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
Kay, Allen M
2011-May-13 17:48 UTC
[Xen-devel] RE: [Xen HV PATCH] VT-d: Fix resource leaks on error paths
Looks good to me. ACK! -----Original Message----- From: Igor Mammedov [mailto:imammedo@redhat.com] Sent: Thursday, May 12, 2011 1:30 AM To: xen-devel@lists.xensource.com Cc: Kay, Allen M; keir@xen.org Subject: [Xen HV PATCH] VT-d: Fix resource leaks on error paths On error exit from functions, maped pages should be unmapped and acquired locks released. Signed-off-by: Igor Mammedov <imammedo@redhat.com> 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