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@citrix.com>
Reviewed-by: Jan Beulich <JBeulich@suse.com>
Acked-by: Tim Deegan <tim@xen.org>
{
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);
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;
}