qemu/system
David Hildenbrand b84f06c2be softmmu/physmem: fix memory leak in dirty_memory_extend()
As reported by Peter, we might be leaking memory when removing the
highest RAMBlock (in the weird ram_addr_t space), and adding a new one.

We will fail to realize that we already allocated bitmaps for more
dirty memory blocks, and effectively discard the pointers to them.

Fix it by getting rid of last_ram_page() and by remembering the number
of dirty memory blocks that have been allocated already.

While at it, let's use "unsigned int" for the number of blocks, which
should be sufficient until we reach ~32 exabytes.

Looks like this leak was introduced as we switched from using a single
bitmap_zero_extend() to allocating multiple bitmaps:
bitmap_zero_extend() relies on g_renew() which should have taken care of
this.

Resolves: https://lkml.kernel.org/r/CAFEAcA-k7a+VObGAfCFNygQNfCKL=AfX6A4kScq=VSSK0peqPg@mail.gmail.com
Reported-by: Peter Maydell <peter.maydell@linaro.org>
Fixes: 5b82b703b6 ("memory: RCU ram_list.dirty_memory[] for safe RAM hotplug")
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Tested-by: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-stable@nongnu.org
Cc: Stefan Hajnoczi <stefanha@redhat.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>
Cc: Peter Xu <peterx@redhat.com>
Cc: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: David Hildenbrand <david@redhat.com>
Link: https://lore.kernel.org/r/20240828090743.128647-1-david@redhat.com
Signed-off-by: Peter Xu <peterx@redhat.com>
2024-09-09 10:55:39 -04:00
..
arch_init.c
async-teardown.c qemu/osdep: Add excluded fd parameter to qemu_close_all_open_fd() 2024-08-05 08:21:59 +10:00
balloon.c balloon: Fix a misleading error message 2023-11-17 10:07:52 +01:00
bootdevice.c system/bootdevice: Don't unregister reset handler in restore_boot_order() 2024-02-27 13:01:42 +00:00
cpu-throttle.c qemu/main-loop: rename qemu_cond_wait_iothread() to qemu_cond_wait_bql() 2024-01-08 10:45:43 -05:00
cpu-timers.c system/cpu-timers: Introduce ICountMode enumerator 2024-01-19 12:28:59 +01:00
cpus.c qmp: Fix higher half vaddrs for [p]memsave 2024-08-05 09:34:34 +02:00
datadir.c
device_tree-stub.c kconfig: allow compiling out QEMU device tree code per target 2024-05-10 15:45:15 +02:00
device_tree.c kconfig: allow compiling out QEMU device tree code per target 2024-05-10 15:45:15 +02:00
dirtylimit.c migration: migration_thread_is_self 2024-03-11 16:28:59 -04:00
dma-helpers.c system/physmem: Propagate AddressSpace to MapClient helpers 2024-05-08 19:43:23 +02:00
globals.c hw/xen: detect when running inside stubdomain 2024-07-01 14:57:18 +02:00
ioport.c exec/ioport: Add portio_list_set_enabled() 2024-02-14 06:09:32 -05:00
main.c softmmu: pass the main loop status to gdb "Wxx" packet 2023-10-12 12:33:24 +10:00
memory_ldst.c.inc system: Move memory_ldst.c.inc to system 2024-02-13 10:59:25 +03:00
memory_mapping.c system/memory_mapping: make range overlap check more readable 2024-07-23 20:30:36 +02:00
memory.c softmmu: Support concurrent bounce buffers 2024-09-09 10:55:39 -04:00
meson.build kconfig: allow compiling out QEMU device tree code per target 2024-05-10 15:45:15 +02:00
physmem.c softmmu/physmem: fix memory leak in dirty_memory_extend() 2024-09-09 10:55:39 -04:00
qdev-monitor.c qapi: Inline and remove QERR_DEVICE_NO_HOTPLUG definition 2024-04-24 09:50:58 +02:00
qemu-seccomp.c seccomp: report EPERM instead of killing process for spawn set 2024-03-19 20:17:12 +00:00
qtest.c qtest: move qtest_{get, set}_virtual_clock to accel/qtest/qtest.c 2024-06-24 10:14:56 +01:00
rtc.c error: Drop superfluous #include "qapi/qmp/qerror.h" 2024-04-24 09:50:58 +02:00
runstate-action.c
runstate-hmp-cmds.c
runstate.c replay: allow runstate shutdown->running when replaying trace 2024-08-16 14:04:19 +01:00
tpm-hmp-cmds.c
tpm.c
trace-events tracepoints: move physmem trace points 2024-07-05 12:33:37 +01:00
trace.h
vl.c system/vl.c: Print machine name, not "(null)", for unknown machine types 2024-08-23 12:08:11 +03:00
watchpoint.c system/watchpoint: Move TCG specific code to accel/tcg/ 2024-01-19 12:28:59 +01:00