On 3/5/26 8:15 AM, Peter Maydell wrote:
In plugin_exit() we call g_hash_table_get_values() to get a GList which we look at to print some information. This code has multiple issues: * it names the local variable for the GList "count", which shadows the "qemu_plugin_scoreboard *count". This isn't incorrect, but it is unnecessarily confusing * it doesn't free the list, and the leak sanitizer complains:Indirect leak of 2328 byte(s) in 97 object(s) allocated from: #0 0x5589b0b72293 in malloc (/home/pm215/qemu/build/x86-tgt-san/qemu-system-i386+0x1a2f293) (BuildId: 26964cad9e3f81d35fc144d7cc88b53adf6f60c7) #1 0x78fd8cfa1ac9 in g_malloc (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x62ac9) (BuildId: 116e142b9b52c8a4dfd403e759e71ab8f95d8bb3) #2 0x78fd8cf96e4a in g_list_prepend (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x57e4a) (BuildId: 116e142b9b52c8a4dfd403e759e71ab8f95d8bb3) #3 0x78fd8cf8b318 in g_hash_table_get_values (/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x4c318) (BuildId: 116e142b9b52c8a4dfd403e759e71ab8f95d8bb3) #4 0x78fd84d1a90c in plugin_exit /home/pm215/qemu/build/x86-tgt-san/../../tests/tcg/plugins/mem.c:87:25 * in iterating through the list it updates "count", so by the time we get to the end of the loop we no longer have a pointer to the head of the list that we could use to free it * it checks for the list being NULL twice (once in an if() and once in the for() loop's "while" condition), which is redundant * it skips the loop if g_list_next(counts) is NULL, which means it will wrongly skip the loop if the list has only one entry Rewrite the iteration code to fix these problems. Signed-off-by: Peter Maydell <[email protected]> --- I am assuming that not printing the region info when there is exactly one region is a mistake, but perhaps it is intentional? tests/tcg/plugins/mem.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-)
Reviewed-by: Pierrick Bouvier <[email protected]>
