diff options
Diffstat (limited to '0057-libs-guest-Fix-resource-leaks-in-xc_core_arch_map_p2.patch')
-rw-r--r-- | 0057-libs-guest-Fix-resource-leaks-in-xc_core_arch_map_p2.patch | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/0057-libs-guest-Fix-resource-leaks-in-xc_core_arch_map_p2.patch b/0057-libs-guest-Fix-resource-leaks-in-xc_core_arch_map_p2.patch new file mode 100644 index 0000000..ea80bd0 --- /dev/null +++ b/0057-libs-guest-Fix-resource-leaks-in-xc_core_arch_map_p2.patch @@ -0,0 +1,65 @@ +From 01f85d835bb10d18bdab2cc780ea5ad47004516d Mon Sep 17 00:00:00 2001 +From: Andrew Cooper <andrew.cooper3@citrix.com> +Date: Fri, 3 Mar 2023 08:02:59 +0100 +Subject: [PATCH 57/89] libs/guest: Fix resource leaks in + xc_core_arch_map_p2m_tree_rw() +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +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 <edwin.torok@cloud.com> +Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com> +Reviewed-by: Juergen Gross <jgross@suse.com> +master commit: 1868d7f22660c8980bd0a7e53f044467e8b63bb5 +master date: 2023-02-27 15:51:23 +0000 +--- + tools/libs/guest/xg_core_x86.c | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +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 +-- +2.40.0 + |