On 7/3/26 16:50, Peter Maydell wrote:
The current implementation of qdev_get_printable_name() sometimes
returns a string that must not be freed (vdev->id or the fixed
fallback string "<unknown device>" and sometimes returns a string
that must be freed (the return value of qdev_get_dev_path()). This
forces callers to leak the string in the "must be freed" case.

Make the function consistent that it always returns a string that
the caller must free, and make the three callsites free it.

This fixes leaks like this that show up when running "make check"
with the address sanitizer enabled:

Direct leak of 13 byte(s) in 1 object(s) allocated from:
     #0 0x5561de21f293 in malloc 
(/home/pm215/qemu/build/san/qemu-system-i386+0x1a2d293) (BuildId: 
6d6fad7130fd5c8dbbc03401df554f68b8034936)
     #1 0x767ad7a82ac9 in g_malloc 
(/lib/x86_64-linux-gnu/libglib-2.0.so.0+0x62ac9) (BuildId: 
116e142b9b52c8a4dfd403e759e71ab8f95d8bb3)
     #2 0x5561deaf34f2 in pcibus_get_dev_path 
/home/pm215/qemu/build/san/../../hw/pci/pci.c:2792:12
     #3 0x5561df9d8830 in qdev_get_printable_name 
/home/pm215/qemu/build/san/../../hw/core/qdev.c:431:24
     #4 0x5561deebdca2 in virtio_init_region_cache 
/home/pm215/qemu/build/san/../../hw/virtio/virtio.c:298:17
     #5 0x5561df05f842 in memory_region_write_accessor 
/home/pm215/qemu/build/san/../../system/memory.c:491:5
     #6 0x5561df05ed1b in access_with_adjusted_size 
/home/pm215/qemu/build/san/../../system/memory.c:567:18
     #7 0x5561df05e3fa in memory_region_dispatch_write 
/home/pm215/qemu/build/san/../../system/memory.c
     #8 0x5561df0aa805 in address_space_stm_internal 
/home/pm215/qemu/build/san/../../system/memory_ldst.c.inc:85:13
     #9 0x5561df0bcad3 in qtest_process_command 
/home/pm215/qemu/build/san/../../system/qtest.c:480:13

Cc: [email protected]
Fixes: e209d4d7a31b9 ("virtio: improve virtqueue mapping error messages")
Signed-off-by: Peter Maydell <[email protected]>
---
  hw/core/qdev.c         |  4 ++--
  hw/virtio/virtio.c     | 12 +++++++++---
  include/hw/core/qdev.h | 16 ++++++++++++++++
  3 files changed, 27 insertions(+), 5 deletions(-)

Reviewed-by: Philippe Mathieu-Daudé <[email protected]>

Reply via email to