From: Andrew Cooper Date: Fri, 3 Mar 2023 07:02:59 +0000 (+0100) Subject: libs/guest: Fix resource leaks in xc_core_arch_map_p2m_tree_rw() X-Git-Tag: archive/raspbian/4.17.1+2-gb773c48e36-1+rpi1~1^2~30^2~17 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=01f85d835bb10d18bdab2cc780ea5ad47004516d;p=xen.git 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: bd7a29c3d0b9 ("tools/libs/ctrl: fix xc_core_arch_map_p2m() to support linear p2m table") Reported-by: Edwin Török Signed-off-by: Andrew Cooper Reviewed-by: Juergen Gross master commit: 1868d7f22660c8980bd0a7e53f044467e8b63bb5 master date: 2023-02-27 15:51:23 +0000 --- diff --git a/tools/libs/guest/xg_core_x86.c b/tools/libs/guest/xg_core_x86.c index 61106b98b8..c5e4542ccc 100644 --- a/tools/libs/guest/xg_core_x86.c +++ b/tools/libs/guest/xg_core_x86.c @@ -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