mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
libs/guest: Fix resource leaks in xc_core_arch_map_p2m_tree_rw()
Edwin, with the help of GCC's -fanalyzer, identified that p2m_frame_list_list gets leaked. What fanalyzer can't see is that the live_p2m_frame_list_list and live_p2m_frame_list foreign mappings are leaked too. Rework the logic so the out path is executed unconditionally, which cleans up all the intermediate allocations/mappings appropriately. Fixes:bd7a29c3d0("tools/libs/ctrl: fix xc_core_arch_map_p2m() to support linear p2m table") Reported-by: Edwin Török <edwin.torok@cloud.com> Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> Reviewed-by: Juergen Gross <jgross@suse.com> master commit:1868d7f226master date: 2023-02-27 15:51:23 +0000
This commit is contained in:
1 parent
53bd16bcc0
commit
01f85d835b
1 file changed
+3
-5
@@ -229,11 +229,11 @@ xc_core_arch_map_p2m_tree_rw(xc_interface *xch, struct domain_info_context *dinf
|
||||
uint32_t dom, shared_info_any_t *live_shinfo)
|
||||
{
|
||||
/* Double and single indirect references to the live P2M table */
|
||||
xen_pfn_t *live_p2m_frame_list_list;
|
||||
xen_pfn_t *live_p2m_frame_list_list = NULL;
|
||||
xen_pfn_t *live_p2m_frame_list = NULL;
|
||||
/* Copies of the above. */
|
||||
xen_pfn_t *p2m_frame_list_list = NULL;
|
||||
xen_pfn_t *p2m_frame_list;
|
||||
xen_pfn_t *p2m_frame_list = NULL;
|
||||
|
||||
int err;
|
||||
int i;
|
||||
@@ -297,8 +297,6 @@ xc_core_arch_map_p2m_tree_rw(xc_interface *xch, struct domain_info_context *dinf
|
||||
|
||||
dinfo->p2m_frames = P2M_FL_ENTRIES;
|
||||
|
||||
return p2m_frame_list;
|
||||
|
||||
out:
|
||||
err = errno;
|
||||
|
||||
@@ -312,7 +310,7 @@ xc_core_arch_map_p2m_tree_rw(xc_interface *xch, struct domain_info_context *dinf
|
||||
|
||||
errno = err;
|
||||
|
||||
return NULL;
|
||||
return p2m_frame_list;
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||