[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH] hw/i386/acpi-build.c: Fix memory leak in acpi_b
From: |
Christian Borntraeger |
Subject: |
Re: [Qemu-devel] [PATCH] hw/i386/acpi-build.c: Fix memory leak in acpi_build_tables_cleanup() |
Date: |
Thu, 30 Oct 2014 21:02:26 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.8.0 |
Am 29.10.2014 15:07, schrieb Nikita Belov:
> There are three ACPI tables: 'linker_data', 'rsdp' and 'table_data'. They are
> used differently. Two of them are being copied before using and only the copy
> is used later. But the third is used directly. Because of that we need to free
> two tables completely and delete only wrapper for the third one.
>
> Valgrind output:
> ==23931== 131,072 bytes in 1 blocks are definitely lost in loss record 7,729
> of 7,734
> ==23931== at 0x4C2CE8E: realloc (in
> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
> ==23931== by 0x2EA920: realloc_and_trace (vl.c:2811)
> ==23931== by 0x509E6AE: g_realloc (in
> /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
> ==23931== by 0x506DB32: ??? (in
> /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
> ==23931== by 0x506E463: g_array_set_size (in
> /lib/x86_64-linux-gnu/libglib-2.0.so.0.4000.0)
> ==23931== by 0x256A4F: acpi_align_size (acpi-build.c:487)
> ==23931== by 0x259F92: acpi_build (acpi-build.c:1601)
> ==23931== by 0x25A212: acpi_setup (acpi-build.c:1682)
> ==23931== by 0x24F346: pc_guest_info_machine_done (pc.c:1110)
> ==23931== by 0x55FAAB: notifier_list_notify (notify.c:39)
> ==23931== by 0x2EA704: qemu_run_machine_init_done_notifiers (vl.c:2759)
> ==23931== by 0x2EEC3C: main (vl.c:4504)
>
> Signed-off-by: Nikita Belov <address@hidden>
Acked-by: Christian Borntraeger <address@hidden>
I found the same issue during the preparation of my KVM forum presentation and
came to the same conclusion.
CC Paolo (as x86 maintainer.)
> ---
> hw/i386/acpi-build.c | 6 ++----
> 1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 00be4bb..c1778db 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -1498,11 +1498,9 @@ static inline void
> acpi_build_tables_init(AcpiBuildTables *tables)
> static inline void acpi_build_tables_cleanup(AcpiBuildTables *tables, bool
> mfre)
> {
> void *linker_data = bios_linker_loader_cleanup(tables->linker);
> - if (mfre) {
> - g_free(linker_data);
> - }
> + g_free(linker_data);
> g_array_free(tables->rsdp, mfre);
> - g_array_free(tables->table_data, mfre);
> + g_array_free(tables->table_data, true);
> }
>
> typedef
> --
> 1.9.0.msysgit.0
>