[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] Ping: [Patch v2] x86/mm: Prevent leaking domain mappings in paging_log_dirty_op()
>>> On 10.12.13 at 15:50, Andrew Cooper <andrew.cooper3@xxxxxxxxxx> wrote: > Coverity ID: 1135374 1135375 1135376 1135377 > > If {copy_to,clear}_guest_offset() fails, we would leak the domain mappings > for > l4 thru l1. > > Fixing this requires having conditional unmaps on the faulting path, which > in > turn requires explicitly initialising the pointers to NULL because of the > early ENOMEM exit. > > Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > CC: Keir Fraser <keir@xxxxxxx> > Reviewed-by: Jan Beulich <JBeulich@xxxxxxxx> > CC: Tim Deegan <tim@xxxxxxx> Tim? > --- > > Changes in v2: > * Reorder unmaps until after the unlock/unpause (Suggested by Jan) > --- > xen/arch/x86/mm/paging.c | 14 ++++++++++++-- > 1 file changed, 12 insertions(+), 2 deletions(-) > > diff --git a/xen/arch/x86/mm/paging.c b/xen/arch/x86/mm/paging.c > index 4ba7669..21344e5 100644 > --- a/xen/arch/x86/mm/paging.c > +++ b/xen/arch/x86/mm/paging.c > @@ -330,8 +330,8 @@ int paging_log_dirty_op(struct domain *d, struct > xen_domctl_shadow_op *sc) > { > int rv = 0, clean = 0, peek = 1; > unsigned long pages = 0; > - mfn_t *l4, *l3, *l2; > - unsigned long *l1; > + mfn_t *l4 = NULL, *l3 = NULL, *l2 = NULL; > + unsigned long *l1 = NULL; > int i4, i3, i2; > > domain_pause(d); > @@ -434,6 +434,16 @@ int paging_log_dirty_op(struct domain *d, struct > xen_domctl_shadow_op *sc) > out: > paging_unlock(d); > domain_unpause(d); > + > + if ( l1 ) > + unmap_domain_page(l1); > + if ( l2 ) > + unmap_domain_page(l2); > + if ( l3 ) > + unmap_domain_page(l3); > + if ( l4 ) > + unmap_domain_page(l4); > + > return rv; > } > > -- > 1.7.10.4 > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |