[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PULL 17/22] target/arm: Free name string in ARMCPRegInfo h
From: |
Peter Maydell |
Subject: |
[Qemu-devel] [PULL 17/22] target/arm: Free name string in ARMCPRegInfo hashtable entries |
Date: |
Fri, 14 Dec 2018 14:42:09 +0000 |
When we add a new entry to the ARMCPRegInfo hash table in
add_cpreg_to_hashtable(), we allocate memory for tehe
ARMCPRegInfo struct itself, and we also g_strdup() the
name string. So the hashtable's value destructor function
must free the name string as well as the struct.
Spotted by clang's leak sanitizer. The leak here is a
small one-off leak at startup, because we don't support
CPU hotplug, and so the only time when we destroy
hash table entries is for the case where ARM_CP_OVERRIDE
means we register a wildcard entry and then override it later.
Signed-off-by: Peter Maydell <address@hidden>
Reviewed-by: Richard Henderson <address@hidden>
Reviewed-by: Philippe Mathieu-Daudé <address@hidden>
Message-id: address@hidden
---
target/arm/cpu.c | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/target/arm/cpu.c b/target/arm/cpu.c
index 60411f6bfe0..b84a6c0e678 100644
--- a/target/arm/cpu.c
+++ b/target/arm/cpu.c
@@ -642,6 +642,20 @@ uint64_t arm_cpu_mp_affinity(int idx, uint8_t clustersz)
return (Aff1 << ARM_AFF1_SHIFT) | Aff0;
}
+static void cpreg_hashtable_data_destroy(gpointer data)
+{
+ /*
+ * Destroy function for cpu->cp_regs hashtable data entries.
+ * We must free the name string because it was g_strdup()ed in
+ * add_cpreg_to_hashtable(). It's OK to cast away the 'const'
+ * from r->name because we know we definitely allocated it.
+ */
+ ARMCPRegInfo *r = data;
+
+ g_free((void *)r->name);
+ g_free(r);
+}
+
static void arm_cpu_initfn(Object *obj)
{
CPUState *cs = CPU(obj);
@@ -649,7 +663,7 @@ static void arm_cpu_initfn(Object *obj)
cs->env_ptr = &cpu->env;
cpu->cp_regs = g_hash_table_new_full(g_int_hash, g_int_equal,
- g_free, g_free);
+ g_free, cpreg_hashtable_data_destroy);
QLIST_INIT(&cpu->pre_el_change_hooks);
QLIST_INIT(&cpu->el_change_hooks);
--
2.19.2
- [Qemu-devel] [PULL 07/22] hw/ppc/mac_newworld, mac_oldworld: Don't use load_image(), (continued)
- [Qemu-devel] [PULL 07/22] hw/ppc/mac_newworld, mac_oldworld: Don't use load_image(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 09/22] hw/smbios/smbios.c: Don't use load_image(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 08/22] hw/ppc/ppc405_boards: Don't use load_image(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 11/22] hw/i386/pc.c: Don't use load_image(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 10/22] hw/pci/pci.c: Don't use load_image(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 12/22] hw/i386/multiboot.c: Don't use load_image(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 13/22] hw/block/tc58128.c: Don't use load_image(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 14/22] device_tree.c: Don't use load_image(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 15/22] hw/core/loader.c: Remove load_image(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 19/22] hw/sd/sdhci: Don't leak memory region in sdhci_sysbus_realize(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 17/22] target/arm: Free name string in ARMCPRegInfo hashtable entries,
Peter Maydell <=
- [Qemu-devel] [PULL 16/22] include/hw/loader.h: Document load_image_size(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 21/22] target/arm: Create timers in realize, not init, Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 22/22] virt: Fix broken indentation, Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 18/22] hw/arm/mps2-tz.c: Free mscname string in make_dma(), Peter Maydell, 2018/12/14
- [Qemu-devel] [PULL 20/22] tests/test-arm-mptimer: Don't leak string memory, Peter Maydell, 2018/12/14
- Re: [Qemu-devel] [PULL 00/22] misc queue, Peter Maydell, 2018/12/16
- Re: [Qemu-devel] [PULL 00/22] misc queue, Peter Maydell, 2018/12/16
- Re: [Qemu-devel] [PULL 00/22] misc queue, no-reply, 2018/12/23