* [PULL 00/24] Qom patches
@ 2026-05-11 20:20 marcandre.lureau
2026-05-11 20:20 ` [PULL 01/24] hw/remote: check visit return in vfu_object_set_socket marcandre.lureau
` (25 more replies)
0 siblings, 26 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The following changes since commit 5e61afe211e82a9af15a8794a0bd29bb574e953b:
Merge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging (2026-05-11 10:49:53 -0400)
are available in the Git repository at:
https://gitlab.com/marcandre.lureau/qemu.git tags/qom-pull-request
for you to fetch changes up to bc61a3209bf064826481a5f8f2b4feb47c70b02f:
target/s390x: add gen-features.h dependency to s390x_system_ss (2026-05-11 23:59:33 +0400)
----------------------------------------------------------------
QOM object lifecycle fixes
----------------------------------------------------------------
Marc-André Lureau (23):
hw/remote: check visit return in vfu_object_set_socket
qom/object: update doc about NULL values in link properties
hw/remote: guard listener unregister in finalize
io/net-listener: move mutex init to instance_init
net/colo-compare: guard finalize against uninitialized state
ui/console: remove console from global list on finalization
hw/i386/x86: free oem_id and oem_table_id on finalization
hw/core/resetcontainer: free children array on finalization
net/can: free ifname on socketcan finalization
backends/igvm-cfg: free filename on finalization
scsi/pr-manager-helper: free path on finalization
accel/kvm: free device path on finalization
system/qtest: add missing qtest_finalize()
hw/fsi: move OPBus address space init to realize
hw/fsi: move OPBus qbus_init() to instance_init
hw/gpio/pca9552: fix state_str leak in pca955x_set_led
hw/arm/aspeed: free fmc_model and spi_model on finalization
hw/arm/sbsa-ref: free unrealized flash devices on finalization
hw/arm/virt: free flash devices and OEM strings on finalization
hw/ppc/pnv: drop extra ref on PHB after adding as child
hw/riscv/virt: free flash devices and OEM strings on finalization
meson: drop sphinx-build < 1.7 compatiblity check
target/s390x: add gen-features.h dependency to s390x_system_ss
Peter Xu (1):
system/ioport: Fix qom-list-properties crash on portio list obj
docs/meson.build | 14 +-------------
include/qom/object.h | 8 ++++----
accel/kvm/kvm-all.c | 8 ++++++++
backends/igvm-cfg.c | 1 +
hw/arm/aspeed.c | 9 +++++++++
hw/arm/sbsa-ref.c | 12 ++++++++++++
hw/arm/virt.c | 14 ++++++++++++++
hw/core/resetcontainer.c | 3 +++
hw/fsi/aspeed_apb2opb.c | 37 ++++++++++++++++++++++++-------------
hw/gpio/pca9552.c | 2 +-
hw/i386/x86.c | 9 +++++++++
hw/ppc/pnv.c | 1 +
hw/remote/remote-obj.c | 4 +++-
hw/remote/vfio-user-obj.c | 4 +++-
hw/riscv/virt.c | 14 ++++++++++++++
io/net-listener.c | 9 ++++++++-
net/can/can_socketcan.c | 8 ++++++++
net/colo-compare.c | 31 +++++++++++++++----------------
scsi/pr-manager-helper.c | 1 +
system/ioport.c | 11 +++++++++--
system/qtest.c | 10 ++++++++++
ui/console.c | 5 ++++-
target/s390x/meson.build | 1 +
23 files changed, 163 insertions(+), 53 deletions(-)
--
2.54.0
^ permalink raw reply [flat|nested] 31+ messages in thread
* [PULL 01/24] hw/remote: check visit return in vfu_object_set_socket
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 02/24] qom/object: update doc about NULL values in link properties marcandre.lureau
` (24 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Elena Ufimtseva,
Jagannathan Raman
From: Marc-André Lureau <marcandre.lureau@redhat.com>
vfu_object_set_socket() dereferences o->socket without checking if
visit_type_SocketAddress() succeeded. On failure, o->socket remains
NULL, leading to a NULL dereference. Check the return value.
Fixes: 8f9a9259d32c ("vfio-user: define vfio-user-server object")
Reviewed-by: Jagannathan Raman <jag.raman@oracle.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/remote/vfio-user-obj.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/hw/remote/vfio-user-obj.c b/hw/remote/vfio-user-obj.c
index 12ecdab6dea..49bf5ecae0c 100644
--- a/hw/remote/vfio-user-obj.c
+++ b/hw/remote/vfio-user-obj.c
@@ -161,7 +161,9 @@ static void vfu_object_set_socket(Object *obj, Visitor *v, const char *name,
o->socket = NULL;
- visit_type_SocketAddress(v, name, &o->socket, errp);
+ if (!visit_type_SocketAddress(v, name, &o->socket, errp)) {
+ return;
+ }
if (o->socket->type != SOCKET_ADDRESS_TYPE_UNIX) {
error_setg(errp, "vfu: Unsupported socket type - %s",
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 02/24] qom/object: update doc about NULL values in link properties
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
2026-05-11 20:20 ` [PULL 01/24] hw/remote: check visit return in vfu_object_set_socket marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 03/24] hw/remote: guard listener unregister in finalize marcandre.lureau
` (23 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Paolo Bonzini,
Daniel P. Berrangé
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
include/qom/object.h | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/include/qom/object.h b/include/qom/object.h
index f40d8ccd4a2..2a2829343d0 100644
--- a/include/qom/object.h
+++ b/include/qom/object.h
@@ -1714,10 +1714,10 @@ void object_property_allow_set_link(const Object *obj, const char *name,
*
* Links form the graph in the object model.
*
- * The @check() callback is invoked when
- * object_property_set_link() is called and can raise an error to prevent the
- * link being set. If @check is NULL, the property is read-only
- * and cannot be set.
+ * The @check() callback is invoked when object_property_set_link() is called
+ * and can raise an error to prevent the link being set. If @check is NULL, the
+ * property is read-only and cannot be set. Care must be taken to handle NULL
+ * values for @val.
*
* Ownership of the pointer that @child points to is transferred to the
* link property. The reference count for *@child is
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 03/24] hw/remote: guard listener unregister in finalize
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
2026-05-11 20:20 ` [PULL 01/24] hw/remote: check visit return in vfu_object_set_socket marcandre.lureau
2026-05-11 20:20 ` [PULL 02/24] qom/object: update doc about NULL values in link properties marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 04/24] io/net-listener: move mutex init to instance_init marcandre.lureau
` (22 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, Marc-André Lureau, jag.raman, Elena Ufimtseva
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Guard the unregister by checking whether the listener callback was
set, which only happens right before registration.
Cc: jag.raman@oracle.com
Fixes: c7d80c7c1d9 ("multi-process: Associate fd of a PCIDevice with its object")
Reviewed-by: Jagannathan Raman <jag.raman@oracle.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/remote/remote-obj.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/hw/remote/remote-obj.c b/hw/remote/remote-obj.c
index 86192dc8dad..4e74ae76158 100644
--- a/hw/remote/remote-obj.c
+++ b/hw/remote/remote-obj.c
@@ -154,7 +154,9 @@ static void remote_object_finalize(Object *obj)
RemoteObjectClass *k = REMOTE_OBJECT_GET_CLASS(obj);
RemoteObject *o = REMOTE_OBJECT(obj);
- device_listener_unregister(&o->listener);
+ if (o->listener.unrealize) {
+ device_listener_unregister(&o->listener);
+ }
if (o->ioc) {
qio_channel_shutdown(o->ioc, QIO_CHANNEL_SHUTDOWN_BOTH, NULL);
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 04/24] io/net-listener: move mutex init to instance_init
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (2 preceding siblings ...)
2026-05-11 20:20 ` [PULL 03/24] hw/remote: guard listener unregister in finalize marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 05/24] net/colo-compare: guard finalize against uninitialized state marcandre.lureau
` (21 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, peterx, Daniel P. Berrangé
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The QIONetListener mutex is initialized in the convenience
constructor qio_net_listener_new() rather than in an instance_init.
This means a bare object_new(TYPE_QIO_NET_LISTENER) produces an
object with an uninitialized mutex, but instance_finalize
unconditionally calls qemu_mutex_destroy() on it, which aborts.
Move the mutex initialization to a proper instance_init so that init
and finalize are always paired regardless of how the object is
created.
Fixes: 9d86181874a ("qio: Protect NetListener callback with mutex")
Cc: peterx@redhat.com
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Reviewed-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
io/net-listener.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/io/net-listener.c b/io/net-listener.c
index 9410d72da9c..1fd0f6cb5ab 100644
--- a/io/net-listener.c
+++ b/io/net-listener.c
@@ -38,7 +38,6 @@ QIONetListener *qio_net_listener_new(void)
QIONetListener *listener;
listener = QIO_NET_LISTENER(object_new(TYPE_QIO_NET_LISTENER));
- qemu_mutex_init(&listener->lock);
return listener;
}
@@ -440,6 +439,13 @@ qio_net_listener_get_local_address(QIONetListener *listener, size_t n,
return qio_channel_socket_get_local_address(sioc, errp);
}
+static void qio_net_listener_instance_init(Object *obj)
+{
+ QIONetListener *listener = QIO_NET_LISTENER(obj);
+
+ qemu_mutex_init(&listener->lock);
+}
+
static void qio_net_listener_finalize(Object *obj)
{
QIONetListener *listener = QIO_NET_LISTENER(obj);
@@ -463,6 +469,7 @@ static const TypeInfo qio_net_listener_info = {
.parent = TYPE_OBJECT,
.name = TYPE_QIO_NET_LISTENER,
.instance_size = sizeof(QIONetListener),
+ .instance_init = qio_net_listener_instance_init,
.instance_finalize = qio_net_listener_finalize,
};
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 05/24] net/colo-compare: guard finalize against uninitialized state
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (3 preceding siblings ...)
2026-05-11 20:20 ` [PULL 04/24] io/net-listener: move mutex init to instance_init marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 06/24] system/ioport: Fix qom-list-properties crash on portio list obj marcandre.lureau
` (20 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, peterx, Zhang Chen, Li Zhijian,
Jason Wang
From: Marc-André Lureau <marcandre.lureau@redhat.com>
colo_compare_finalize() assumes the object was fully set up by
colo_compare_complete(), but a bare object_new() followed by
object_unref() skips the complete callback entirely.
This causes two crashes:
- qemu_mutex_destroy on the static event_mtx which was never
initialized (colo_compare_active is false)
- qemu_bh_delete(NULL) and iothread dereference when s->iothread
is NULL
Guard the event_mtx teardown with colo_compare_active, and the
iothread-dependent cleanup with an s->iothread NULL check.
Fixes: 45942b79b9f8 ("net/colo-compare.c: Check that colo-compare is active")
Cc: peterx@redhat.com
Acked-by: Peter Xu <peterx@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
net/colo-compare.c | 31 +++++++++++++++----------------
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/net/colo-compare.c b/net/colo-compare.c
index abc1326b704..823b8aa323c 100644
--- a/net/colo-compare.c
+++ b/net/colo-compare.c
@@ -1416,7 +1416,7 @@ static void colo_compare_finalize(Object *obj)
break;
}
}
- if (QTAILQ_EMPTY(&net_compares)) {
+ if (colo_compare_active && QTAILQ_EMPTY(&net_compares)) {
colo_compare_active = false;
qemu_mutex_destroy(&event_mtx);
qemu_cond_destroy(&event_complete_cond);
@@ -1431,30 +1431,29 @@ static void colo_compare_finalize(Object *obj)
}
colo_compare_timer_del(s);
+ g_clear_pointer(&s->event_bh, qemu_bh_delete);
- qemu_bh_delete(s->event_bh);
+ if (s->iothread) {
+ AioContext *ctx = iothread_get_aio_context(s->iothread);
- AioContext *ctx = iothread_get_aio_context(s->iothread);
- AIO_WAIT_WHILE(ctx, !s->out_sendco.done);
- if (s->notify_dev) {
- AIO_WAIT_WHILE(ctx, !s->notify_sendco.done);
- }
+ AIO_WAIT_WHILE(ctx, !s->out_sendco.done);
+ if (s->notify_dev) {
+ AIO_WAIT_WHILE(ctx, !s->notify_sendco.done);
+ }
+
+ /* Release all unhandled packets after compare thread exited */
+ g_queue_foreach(&s->conn_list, colo_flush_packets, s);
+ AIO_WAIT_WHILE(NULL, !s->out_sendco.done);
- /* Release all unhandled packets after compare thead exited */
- g_queue_foreach(&s->conn_list, colo_flush_packets, s);
- AIO_WAIT_WHILE(NULL, !s->out_sendco.done);
+ object_unref(OBJECT(s->iothread));
+ }
g_queue_clear(&s->conn_list);
g_queue_clear(&s->out_sendco.send_list);
if (s->notify_dev) {
g_queue_clear(&s->notify_sendco.send_list);
}
-
- if (s->connection_track_table) {
- g_hash_table_destroy(s->connection_track_table);
- }
-
- object_unref(OBJECT(s->iothread));
+ g_clear_pointer(&s->connection_track_table, g_hash_table_destroy);
g_free(s->pri_indev);
g_free(s->sec_indev);
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 06/24] system/ioport: Fix qom-list-properties crash on portio list obj
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (4 preceding siblings ...)
2026-05-11 20:20 ` [PULL 05/24] net/colo-compare: guard finalize against uninitialized state marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 07/24] ui/console: remove console from global list on finalization marcandre.lureau
` (19 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Peter Xu, Mark Cave-Ayland, Paolo Bonzini,
Philippe Mathieu-Daudé
From: Peter Xu <peterx@redhat.com>
Currently qom-list-properties QMP command will crash when querying the
portio list MR object. It's because its finalize() assumes full
initialization done in portio_list_add_1().
Provide a simple fix for now to avoid the crash. There is chance for a
longer term fix, ideally MR should be initialized in instance_init().
However that'll need more work, and that should also be done with cleaning
the hard-coded MR operations in portio_list_add_1(). To be explored.
Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Link: https://lore.kernel.org/r/87a4uvw066.fsf@pond.sub.org
Reported-by: Markus Armbruster <armbru@redhat.com>
Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Signed-off-by: Peter Xu <peterx@redhat.com>
---
system/ioport.c | 11 +++++++++--
1 file changed, 9 insertions(+), 2 deletions(-)
diff --git a/system/ioport.c b/system/ioport.c
index 9209bff2eab..1a0e01fd06b 100644
--- a/system/ioport.c
+++ b/system/ioport.c
@@ -346,8 +346,15 @@ static void memory_region_portio_list_finalize(Object *obj)
{
MemoryRegionPortioList *mrpio = MEMORY_REGION_PORTIO_LIST(obj);
- object_unref(&mrpio->mr);
- g_free(mrpio->ports);
+ /*
+ * This check makes sure any random object_new() (without doing the
+ * rest inits in portio_list_add_1()) will not crash when finalizing.
+ * One example is QMP command qom-list-properties.
+ */
+ if (mrpio->ports) {
+ object_unref(&mrpio->mr);
+ g_free(mrpio->ports);
+ }
}
static const TypeInfo memory_region_portio_list_info = {
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 07/24] ui/console: remove console from global list on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (5 preceding siblings ...)
2026-05-11 20:20 ` [PULL 06/24] system/ioport: Fix qom-list-properties crash on portio list obj marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 08/24] hw/i386/x86: free oem_id and oem_table_id " marcandre.lureau
` (18 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, Marc-André Lureau
From: Marc-André Lureau <marcandre.lureau@redhat.com>
This commit removes the QemuConsole from the global "consoles" list when
it is finalized, fixing use-after-free on throw-away objects.
Reproducer: QMP command qom-list-properties with typename
"qemu-text-console", "qemu-fixed-text-console" or
"qemu-graphic-console".
The assertions added ensure that `dcls`, `gl_block`, and the
`dump_queue` are empty before removal, confirming the console is in a
clean state. This is left to handle correctly in a future series for
hot-unplug case.
Reported-by: Markus Armbruster <armbru@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
ui/console.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/ui/console.c b/ui/console.c
index 6f6330d61f1..eaa41086743 100644
--- a/ui/console.c
+++ b/ui/console.c
@@ -392,10 +392,13 @@ qemu_console_finalize(Object *obj)
{
QemuConsole *c = QEMU_CONSOLE(obj);
- /* TODO: check this code path, and unregister from consoles */
+ /* TODO: fix hot-unplug support of consoles */
+ assert(c->gl_block == 0);
+ assert(qemu_co_queue_empty(&c->dump_queue));
g_clear_pointer(&c->surface, qemu_free_displaysurface);
g_clear_pointer(&c->gl_unblock_timer, timer_free);
g_clear_pointer(&c->ui_timer, timer_free);
+ QTAILQ_REMOVE(&consoles, c, next);
}
static void
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 08/24] hw/i386/x86: free oem_id and oem_table_id on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (6 preceding siblings ...)
2026-05-11 20:20 ` [PULL 07/24] ui/console: remove console from global list on finalization marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 09/24] hw/core/resetcontainer: free children array " marcandre.lureau
` (17 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Paolo Bonzini,
Richard Henderson, Michael S. Tsirkin
From: Marc-André Lureau <marcandre.lureau@redhat.com>
x86_machine_initfn allocates oem_id and oem_table_id via g_strndup,
but no instance_finalize existed for x86_machine_info, so these
strings were never freed when the object was destroyed.
Add x86_machine_finalize to release both fields.
Fixes: d07b22863b8e ("acpi: Move setters/getters of oem fields to X86MachineState")
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/i386/x86.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/hw/i386/x86.c b/hw/i386/x86.c
index 01872cba073..dc7f0d56b01 100644
--- a/hw/i386/x86.c
+++ b/hw/i386/x86.c
@@ -372,6 +372,14 @@ static void x86_machine_initfn(Object *obj)
x86ms->above_4g_mem_start = 4 * GiB;
}
+static void x86_machine_finalize(Object *obj)
+{
+ X86MachineState *x86ms = X86_MACHINE(obj);
+
+ g_free(x86ms->oem_id);
+ g_free(x86ms->oem_table_id);
+}
+
static void x86_machine_class_init(ObjectClass *oc, const void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
@@ -445,6 +453,7 @@ static const TypeInfo x86_machine_info = {
.abstract = true,
.instance_size = sizeof(X86MachineState),
.instance_init = x86_machine_initfn,
+ .instance_finalize = x86_machine_finalize,
.class_size = sizeof(X86MachineClass),
.class_init = x86_machine_class_init,
.interfaces = (const InterfaceInfo[]) {
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 09/24] hw/core/resetcontainer: free children array on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (7 preceding siblings ...)
2026-05-11 20:20 ` [PULL 08/24] hw/i386/x86: free oem_id and oem_table_id " marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 10/24] net/can: free ifname on socketcan finalization marcandre.lureau
` (16 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, Marc-André Lureau, Peter Maydell
From: Marc-André Lureau <marcandre.lureau@redhat.com>
resettable_container_init allocates a GPtrArray for children, but
resettable_container_finalize was empty and never freed it.
Fixes: 4c046ce37af0 ("hw/core: Add ResetContainer which holds objects implementing Resettable")
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/core/resetcontainer.c | 3 +++
1 file changed, 3 insertions(+)
diff --git a/hw/core/resetcontainer.c b/hw/core/resetcontainer.c
index ef84aa2374a..a4a6476a036 100644
--- a/hw/core/resetcontainer.c
+++ b/hw/core/resetcontainer.c
@@ -66,6 +66,9 @@ static void resettable_container_init(Object *obj)
static void resettable_container_finalize(Object *obj)
{
+ ResettableContainer *rc = RESETTABLE_CONTAINER(obj);
+
+ g_ptr_array_unref(rc->children);
}
static void resettable_container_class_init(ObjectClass *klass,
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 10/24] net/can: free ifname on socketcan finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (8 preceding siblings ...)
2026-05-11 20:20 ` [PULL 09/24] hw/core/resetcontainer: free children array " marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 11/24] backends/igvm-cfg: free filename on finalization marcandre.lureau
` (15 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Pavel Pisa, Francisco Iglesias,
Vikram Garhwal, Jason Wang
From: Marc-André Lureau <marcandre.lureau@redhat.com>
can_host_socketcan_set_if allocates ifname via g_strdup, but no
instance_finalize existed to free it.
Fixes: ea15ea8a7c67 ("net/can: support for connecting to Linux host SocketCAN interface.")
Acked-by: Pavel Pisa <pisa@fel.cvut.cz>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
net/can/can_socketcan.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/net/can/can_socketcan.c b/net/can/can_socketcan.c
index 8a57ae07178..be67ed7f5a9 100644
--- a/net/can/can_socketcan.c
+++ b/net/can/can_socketcan.c
@@ -319,11 +319,19 @@ static void can_host_socketcan_class_init(ObjectClass *klass,
chc->disconnect = can_host_socketcan_disconnect;
}
+static void can_host_socketcan_finalize(Object *obj)
+{
+ CanHostSocketCAN *c = CAN_HOST_SOCKETCAN(obj);
+
+ g_free(c->ifname);
+}
+
static const TypeInfo can_host_socketcan_info = {
.parent = TYPE_CAN_HOST,
.name = TYPE_CAN_HOST_SOCKETCAN,
.instance_size = sizeof(CanHostSocketCAN),
.instance_init = can_host_socketcan_instance_init,
+ .instance_finalize = can_host_socketcan_finalize,
.class_init = can_host_socketcan_class_init,
};
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 11/24] backends/igvm-cfg: free filename on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (9 preceding siblings ...)
2026-05-11 20:20 ` [PULL 10/24] net/can: free ifname on socketcan finalization marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 12/24] scsi/pr-manager-helper: free path " marcandre.lureau
` (14 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Gerd Hoffmann,
Stefano Garzarella, Ani Sinha
From: Marc-André Lureau <marcandre.lureau@redhat.com>
set_igvm allocates filename via g_strdup, but igvm_cfg_finalize
did not free it.
Fixes: c1d466d267cf ("backends/igvm: Add IGVM loader and configuration")
Reviewed-by: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
backends/igvm-cfg.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/backends/igvm-cfg.c b/backends/igvm-cfg.c
index 64589ca34f2..e1f09855f66 100644
--- a/backends/igvm-cfg.c
+++ b/backends/igvm-cfg.c
@@ -108,4 +108,5 @@ static void igvm_cfg_finalize(Object *obj)
if (igvm->file >= 0) {
igvm_free(igvm->file);
}
+ g_free(igvm->filename);
}
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 12/24] scsi/pr-manager-helper: free path on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (10 preceding siblings ...)
2026-05-11 20:20 ` [PULL 11/24] backends/igvm-cfg: free filename on finalization marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:20 ` [PULL 13/24] accel/kvm: free device " marcandre.lureau
` (13 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Paolo Bonzini, Fam Zheng,
open list:Block SCSI subsystem
From: Marc-André Lureau <marcandre.lureau@redhat.com>
set_path allocates path via g_strdup, but
pr_manager_helper_instance_finalize did not free it.
Fixes: 9bad2a6b9d0a ("scsi: add persistent reservation manager using qemu-pr-helper")
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
scsi/pr-manager-helper.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/scsi/pr-manager-helper.c b/scsi/pr-manager-helper.c
index f6454cd80de..53432e6d606 100644
--- a/scsi/pr-manager-helper.c
+++ b/scsi/pr-manager-helper.c
@@ -284,6 +284,7 @@ static void pr_manager_helper_instance_finalize(Object *obj)
{
PRManagerHelper *pr_mgr = PR_MANAGER_HELPER(obj);
+ g_free(pr_mgr->path);
object_unref(OBJECT(pr_mgr->ioc));
qemu_mutex_destroy(&pr_mgr->lock);
}
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 13/24] accel/kvm: free device path on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (11 preceding siblings ...)
2026-05-11 20:20 ` [PULL 12/24] scsi/pr-manager-helper: free path " marcandre.lureau
@ 2026-05-11 20:20 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 14/24] system/qtest: add missing qtest_finalize() marcandre.lureau
` (12 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:20 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Paolo Bonzini,
open list:Overall KVM CPUs
From: Marc-André Lureau <marcandre.lureau@redhat.com>
kvm_set_device allocates device via g_strdup, but no
instance_finalize existed for the KVM accelerator type.
Fixes: aef158b093b9 ("Add class property to configure KVM device node to use")
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
accel/kvm/kvm-all.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/accel/kvm/kvm-all.c b/accel/kvm/kvm-all.c
index 92af42503b1..96f90ebb240 100644
--- a/accel/kvm/kvm-all.c
+++ b/accel/kvm/kvm-all.c
@@ -4342,10 +4342,18 @@ static void kvm_accel_class_init(ObjectClass *oc, const void *data)
kvm_arch_accel_class_init(oc);
}
+static void kvm_accel_finalize(Object *obj)
+{
+ KVMState *s = KVM_STATE(obj);
+
+ g_free(s->device);
+}
+
static const TypeInfo kvm_accel_type = {
.name = TYPE_KVM_ACCEL,
.parent = TYPE_ACCEL,
.instance_init = kvm_accel_instance_init,
+ .instance_finalize = kvm_accel_finalize,
.class_init = kvm_accel_class_init,
.instance_size = sizeof(KVMState),
};
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 14/24] system/qtest: add missing qtest_finalize()
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (12 preceding siblings ...)
2026-05-11 20:20 ` [PULL 13/24] accel/kvm: free device " marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 15/24] hw/fsi: move OPBus address space init to realize marcandre.lureau
` (11 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Fabiano Rosas, Laurent Vivier,
Paolo Bonzini
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Free owned resources on object finalization.
Fixes: 6ba7ada3559e ("qtest: add a QOM object for qtest")
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
system/qtest.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/system/qtest.c b/system/qtest.c
index cf90cd53adb..a79d10d1361 100644
--- a/system/qtest.c
+++ b/system/qtest.c
@@ -1020,10 +1020,20 @@ static void qtest_class_init(ObjectClass *oc, const void *data)
qtest_get_log, qtest_set_log);
}
+static void qtest_finalize(Object *obj)
+{
+ QTest *q = QTEST(obj);
+
+ g_free(q->chr_name);
+ g_free(q->log);
+ object_unref(q->chr);
+}
+
static const TypeInfo qtest_info = {
.name = TYPE_QTEST,
.parent = TYPE_OBJECT,
.class_init = qtest_class_init,
+ .instance_finalize = qtest_finalize,
.instance_size = sizeof(QTest),
.interfaces = (const InterfaceInfo[]) {
{ TYPE_USER_CREATABLE },
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 15/24] hw/fsi: move OPBus address space init to realize
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (13 preceding siblings ...)
2026-05-11 20:21 ` [PULL 14/24] system/qtest: add missing qtest_finalize() marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 16/24] hw/fsi: move OPBus qbus_init() to instance_init marcandre.lureau
` (10 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Cédric Le Goater,
Peter Maydell, Steven Lee, Troy Lee, Jamin Lin, Kane Chen,
Andrew Jeffery, Joel Stanley, Ninad Palsule,
open list:ASPEED BMCs
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The OPBus instance_init initializes an AddressSpace, registering it in
the global address_spaces list. When a bare OPBus object is created
and destroyed (e.g. by qom-tests), there is no finalize to remove the
stale entry, leading to a heap-use-after-free when a subsequent
flatviews_reset iterates the list.
Move address_space_init to the bus realize callback and add the
corresponding address_space_destroy in unrealize, following the
NubusBus pattern. Also fix the memory_region_init owner from NULL to
the OPBus object, so the MR is properly parented instead of dangling
under the "unattached" container.
Fixes: eb04c35da2c0 ("hw/fsi: Aspeed APB2OPB & On-chip peripheral bus")
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/fsi/aspeed_apb2opb.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/hw/fsi/aspeed_apb2opb.c b/hw/fsi/aspeed_apb2opb.c
index b9d72f3ecf6..36092468391 100644
--- a/hw/fsi/aspeed_apb2opb.c
+++ b/hw/fsi/aspeed_apb2opb.c
@@ -348,15 +348,37 @@ static void fsi_opb_init(Object *o)
{
OPBus *opb = OP_BUS(o);
- memory_region_init(&opb->mr, 0, TYPE_FSI_OPB, UINT32_MAX);
+ memory_region_init(&opb->mr, o, TYPE_FSI_OPB, UINT32_MAX);
+}
+
+static void fsi_opb_realize(BusState *bus, Error **errp)
+{
+ OPBus *opb = OP_BUS(bus);
+
address_space_init(&opb->as, &opb->mr, TYPE_FSI_OPB);
}
+static void fsi_opb_unrealize(BusState *bus)
+{
+ OPBus *opb = OP_BUS(bus);
+
+ address_space_destroy(&opb->as);
+}
+
+static void fsi_opb_class_init(ObjectClass *klass, const void *data)
+{
+ BusClass *bc = BUS_CLASS(klass);
+
+ bc->realize = fsi_opb_realize;
+ bc->unrealize = fsi_opb_unrealize;
+}
+
static const TypeInfo opb_info = {
.name = TYPE_OP_BUS,
.parent = TYPE_BUS,
.instance_init = fsi_opb_init,
.instance_size = sizeof(OPBus),
+ .class_init = fsi_opb_class_init,
};
static void fsi_opb_register_types(void)
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 16/24] hw/fsi: move OPBus qbus_init() to instance_init
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (14 preceding siblings ...)
2026-05-11 20:21 ` [PULL 15/24] hw/fsi: move OPBus address space init to realize marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 17/24] hw/gpio/pca9552: fix state_str leak in pca955x_set_led marcandre.lureau
` (9 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Cédric Le Goater,
Peter Maydell, Steven Lee, Troy Lee, Jamin Lin, Kane Chen,
Andrew Jeffery, Joel Stanley, Ninad Palsule,
open list:ASPEED BMCs
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Remove the TODO comment that documented the workaround, as it is
no longer needed.
Suggested-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/fsi/aspeed_apb2opb.c | 13 +------------
1 file changed, 1 insertion(+), 12 deletions(-)
diff --git a/hw/fsi/aspeed_apb2opb.c b/hw/fsi/aspeed_apb2opb.c
index 36092468391..058abc86452 100644
--- a/hw/fsi/aspeed_apb2opb.c
+++ b/hw/fsi/aspeed_apb2opb.c
@@ -273,6 +273,7 @@ static void fsi_aspeed_apb2opb_init(Object *o)
for (i = 0; i < ASPEED_FSI_NUM; i++) {
object_initialize_child(o, "fsi-master[*]", &s->fsi[i],
TYPE_FSI_MASTER);
+ qbus_init(&s->opb[i], sizeof(s->opb[i]), TYPE_OP_BUS, DEVICE(s), NULL);
}
}
@@ -282,18 +283,6 @@ static void fsi_aspeed_apb2opb_realize(DeviceState *dev, Error **errp)
AspeedAPB2OPBState *s = ASPEED_APB2OPB(dev);
int i;
- /*
- * TODO: The OPBus model initializes the OPB address space in
- * the .instance_init handler and this is problematic for test
- * device-introspect-test. To avoid a memory corruption and a QEMU
- * crash, qbus_init() should be called from realize(). Something to
- * improve. Possibly, OPBus could also be removed.
- */
- for (i = 0; i < ASPEED_FSI_NUM; i++) {
- qbus_init(&s->opb[i], sizeof(s->opb[i]), TYPE_OP_BUS, DEVICE(s),
- NULL);
- }
-
sysbus_init_irq(sbd, &s->irq);
memory_region_init_io(&s->iomem, OBJECT(s), &aspeed_apb2opb_ops, s,
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 17/24] hw/gpio/pca9552: fix state_str leak in pca955x_set_led
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (15 preceding siblings ...)
2026-05-11 20:21 ` [PULL 16/24] hw/fsi: move OPBus qbus_init() to instance_init marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 18/24] hw/arm/aspeed: free fmc_model and spi_model on finalization marcandre.lureau
` (8 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Glenn Miles, open list:pca955x,
open list:pca955x
From: Marc-André Lureau <marcandre.lureau@redhat.com>
visit_type_str() allocates state_str, but the function never frees it
on any code path. Use g_autofree to ensure it is freed on return.
Fixes: a90d8f84674d ("misc/pca9552: Add qom set and get")
Reviewed-by: Glenn Miles <milesg@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/gpio/pca9552.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/hw/gpio/pca9552.c b/hw/gpio/pca9552.c
index dd3f1536b65..472d8ad9571 100644
--- a/hw/gpio/pca9552.c
+++ b/hw/gpio/pca9552.c
@@ -342,7 +342,7 @@ static void pca955x_set_led(Object *obj, Visitor *v, const char *name,
PCA955xState *s = PCA955X(obj);
int led, rc, reg, val;
uint8_t state;
- char *state_str;
+ g_autofree char *state_str = NULL;
if (!visit_type_str(v, name, &state_str, errp)) {
return;
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 18/24] hw/arm/aspeed: free fmc_model and spi_model on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (16 preceding siblings ...)
2026-05-11 20:21 ` [PULL 17/24] hw/gpio/pca9552: fix state_str leak in pca955x_set_led marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 19/24] hw/arm/sbsa-ref: free unrealized flash devices " marcandre.lureau
` (7 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Cédric Le Goater,
Peter Maydell, Steven Lee, Troy Lee, Jamin Lin, Kane Chen,
Andrew Jeffery, Joel Stanley, open list:ASPEED BMCs
From: Marc-André Lureau <marcandre.lureau@redhat.com>
The fmc_model and spi_model strings are allocated via g_strdup in
property setters but never freed when the machine object is destroyed.
Fixes: 9820e52fbef7 ("hw/arm/aspeed: Add machine properties to define the flash models")
Reviewed-by: Cédric Le Goater <clg@redhat.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/arm/aspeed.c | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/hw/arm/aspeed.c b/hw/arm/aspeed.c
index a3db3406c5f..a48c4420583 100644
--- a/hw/arm/aspeed.c
+++ b/hw/arm/aspeed.c
@@ -419,12 +419,21 @@ static void aspeed_machine_class_init(ObjectClass *oc, const void *data)
aspeed_machine_class_props_init(oc);
}
+static void aspeed_machine_instance_finalize(Object *obj)
+{
+ AspeedMachineState *bmc = ASPEED_MACHINE(obj);
+
+ g_free(bmc->fmc_model);
+ g_free(bmc->spi_model);
+}
+
static const TypeInfo aspeed_machine_types[] = {
{
.name = TYPE_ASPEED_MACHINE,
.parent = TYPE_MACHINE,
.instance_size = sizeof(AspeedMachineState),
.instance_init = aspeed_machine_instance_init,
+ .instance_finalize = aspeed_machine_instance_finalize,
.class_size = sizeof(AspeedMachineClass),
.class_init = aspeed_machine_class_init,
.abstract = true,
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 19/24] hw/arm/sbsa-ref: free unrealized flash devices on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (17 preceding siblings ...)
2026-05-11 20:21 ` [PULL 18/24] hw/arm/aspeed: free fmc_model and spi_model on finalization marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 20/24] hw/arm/virt: free flash devices and OEM strings " marcandre.lureau
` (6 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Peter Maydell, Leif Lindholm,
open list:SBSA-REF
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Flash devices are created with qdev_new() in instance_init and added as
children, but the initial reference from qdev_new() is only dropped by
sysbus_realize_and_unref() during machine init. When the machine object
is destroyed before realization (e.g. during qtest device introspection),
the flash devices leak.
Fixes: e9fdf453240e ("hw/arm: Add arm SBSA reference machine, devices part")
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/arm/sbsa-ref.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/hw/arm/sbsa-ref.c b/hw/arm/sbsa-ref.c
index 52c35e10c2d..484b90053e8 100644
--- a/hw/arm/sbsa-ref.c
+++ b/hw/arm/sbsa-ref.c
@@ -892,6 +892,17 @@ static void sbsa_ref_instance_init(Object *obj)
sbsa_flash_create(sms);
}
+static void sbsa_ref_instance_finalize(Object *obj)
+{
+ SBSAMachineState *sms = SBSA_MACHINE(obj);
+
+ for (int i = 0; i < ARRAY_SIZE(sms->flash); i++) {
+ if (sms->flash[i] && !qdev_is_realized(DEVICE(sms->flash[i]))) {
+ object_unref(OBJECT(sms->flash[i]));
+ }
+ }
+}
+
static void sbsa_ref_class_init(ObjectClass *oc, const void *data)
{
MachineClass *mc = MACHINE_CLASS(oc);
@@ -930,6 +941,7 @@ static const TypeInfo sbsa_ref_info = {
.name = TYPE_SBSA_MACHINE,
.parent = TYPE_MACHINE,
.instance_init = sbsa_ref_instance_init,
+ .instance_finalize = sbsa_ref_instance_finalize,
.class_init = sbsa_ref_class_init,
.instance_size = sizeof(SBSAMachineState),
.interfaces = aarch64_machine_interfaces,
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 20/24] hw/arm/virt: free flash devices and OEM strings on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (18 preceding siblings ...)
2026-05-11 20:21 ` [PULL 19/24] hw/arm/sbsa-ref: free unrealized flash devices " marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 21/24] hw/ppc/pnv: drop extra ref on PHB after adding as child marcandre.lureau
` (5 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Peter Maydell, open list:Virt
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Flash devices created in instance_init via qdev_new() hold an extra
reference that is only dropped on sysbus_realize_and_unref(). When the
machine is destroyed before realization, the flash objects leak. Also,
the oem_id and oem_table_id strings from g_strndup() are never freed.
Fixes: 602b458201ff ("acpi: Permit OEM ID and OEM table ID fields to be changed")
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/arm/virt.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/hw/arm/virt.c b/hw/arm/virt.c
index 10b19543826..b090233893c 100644
--- a/hw/arm/virt.c
+++ b/hw/arm/virt.c
@@ -4321,6 +4321,19 @@ static void virt_instance_init(Object *obj)
cxl_machine_init(obj, &vms->cxl_devices_state);
}
+static void virt_instance_finalize(Object *obj)
+{
+ VirtMachineState *vms = VIRT_MACHINE(obj);
+
+ for (int i = 0; i < ARRAY_SIZE(vms->flash); i++) {
+ if (vms->flash[i] && !qdev_is_realized(DEVICE(vms->flash[i]))) {
+ object_unref(OBJECT(vms->flash[i]));
+ }
+ }
+ g_free(vms->oem_id);
+ g_free(vms->oem_table_id);
+}
+
static const TypeInfo virt_machine_info = {
.name = TYPE_VIRT_MACHINE,
.parent = TYPE_MACHINE,
@@ -4329,6 +4342,7 @@ static const TypeInfo virt_machine_info = {
.class_size = sizeof(VirtMachineClass),
.class_init = virt_machine_class_init,
.instance_init = virt_instance_init,
+ .instance_finalize = virt_instance_finalize,
.interfaces = (const InterfaceInfo[]) {
{ TYPE_HOTPLUG_HANDLER },
{ }
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 21/24] hw/ppc/pnv: drop extra ref on PHB after adding as child
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (19 preceding siblings ...)
2026-05-11 20:21 ` [PULL 20/24] hw/arm/virt: free flash devices and OEM strings " marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 22/24] hw/riscv/virt: free flash devices and OEM strings on finalization marcandre.lureau
` (4 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Nicholas Piggin, Aditya Gupta,
Glenn Miles, open list:PowerNV Non-Virt...
From: Marc-André Lureau <marcandre.lureau@redhat.com>
object_new() returns an object with refcount 1, and
object_property_add_child() adds another reference. The initial
reference must be dropped so the parent becomes the sole owner,
otherwise the PHB objects leak when the chip is destroyed.
Fixes: 0d512c7120a2 ("ppc/pnv: turn chip8->phbs[] into a PnvPHB* array")
Reviewed-by: Glenn Miles <milesg@linux.ibm.com>
Reviewed-by: Aditya Gupta <adityag@linux.ibm.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/ppc/pnv.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/hw/ppc/pnv.c b/hw/ppc/pnv.c
index 9ed918fa6a1..8306754d9ad 100644
--- a/hw/ppc/pnv.c
+++ b/hw/ppc/pnv.c
@@ -1696,6 +1696,7 @@ static void pnv_chip_power8_instance_init(Object *obj)
*/
object_property_add_child(obj, "phb[*]", phb);
chip8->phbs[i] = PNV_PHB(phb);
+ object_unref(phb);
}
}
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 22/24] hw/riscv/virt: free flash devices and OEM strings on finalization
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (20 preceding siblings ...)
2026-05-11 20:21 ` [PULL 21/24] hw/ppc/pnv: drop extra ref on PHB after adding as child marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 23/24] meson: drop sphinx-build < 1.7 compatiblity check marcandre.lureau
` (3 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Palmer Dabbelt,
Alistair Francis, Weiwei Li, Daniel Henrique Barboza, Liu Zhiwei,
Chao Liu, open list:RISC-V TCG CPUs
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Add instance_finalize to free the two pflash devices (when unrealized)
and the OEM ID strings allocated during instance_init. Fixes leaks
found by ASan.
Fixes: 71eb522c4063 ("riscv/virt: Add the PFlash CFI01 device")
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Reviewed-by: Alistair Francis <alistair.francis@wdc.com>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
hw/riscv/virt.c | 14 ++++++++++++++
1 file changed, 14 insertions(+)
diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c
index a1c323e66df..315049bc86c 100644
--- a/hw/riscv/virt.c
+++ b/hw/riscv/virt.c
@@ -1745,6 +1745,19 @@ static void virt_machine_init(MachineState *machine)
qemu_add_machine_init_done_notifier(&s->machine_done);
}
+static void virt_machine_instance_finalize(Object *obj)
+{
+ RISCVVirtState *s = RISCV_VIRT_MACHINE(obj);
+
+ for (int i = 0; i < ARRAY_SIZE(s->flash); i++) {
+ if (s->flash[i] && !qdev_is_realized(DEVICE(s->flash[i]))) {
+ object_unref(OBJECT(s->flash[i]));
+ }
+ }
+ g_free(s->oem_id);
+ g_free(s->oem_table_id);
+}
+
static void virt_machine_instance_init(Object *obj)
{
RISCVVirtState *s = RISCV_VIRT_MACHINE(obj);
@@ -1984,6 +1997,7 @@ static const TypeInfo virt_machine_typeinfo = {
.parent = TYPE_MACHINE,
.class_init = virt_machine_class_init,
.instance_init = virt_machine_instance_init,
+ .instance_finalize = virt_machine_instance_finalize,
.instance_size = sizeof(RISCVVirtState),
.interfaces = (const InterfaceInfo[]) {
{ TYPE_HOTPLUG_HANDLER },
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 23/24] meson: drop sphinx-build < 1.7 compatiblity check
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (21 preceding siblings ...)
2026-05-11 20:21 ` [PULL 22/24] hw/riscv/virt: free flash devices and OEM strings on finalization marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-11 20:21 ` [PULL 24/24] target/s390x: add gen-features.h dependency to s390x_system_ss marcandre.lureau
` (2 subsequent siblings)
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel; +Cc: stefanha, Marc-André Lureau, Pierrick Bouvier
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Since commit fe791b7fcc ("Python: bump minimum sphinx version to
3.4.3"), we no longer support building with sphinx-build < 3.4.3
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
Reviewed-by: Pierrick Bouvier <pierrick.bouvier@oss.qualcomm.com>
---
docs/meson.build | 14 +-------------
1 file changed, 1 insertion(+), 13 deletions(-)
diff --git a/docs/meson.build b/docs/meson.build
index c3e9fb05846..a8d893681ec 100644
--- a/docs/meson.build
+++ b/docs/meson.build
@@ -4,24 +4,12 @@ sphinx_build = find_program(fs.parent(python.full_path()) / 'sphinx-build',
# Check if tools are available to build documentation.
build_docs = false
if sphinx_build.found()
- SPHINX_ARGS = ['env', 'CONFDIR=' + qemu_confdir, sphinx_build, '-q']
+ SPHINX_ARGS = ['env', 'CONFDIR=' + qemu_confdir, sphinx_build, '-q', '-j', 'auto']
# If we're making warnings fatal, apply this to Sphinx runs as well
if get_option('werror')
SPHINX_ARGS += [ '-W', '-Dkerneldoc_werror=1' ]
endif
- sphinx_version = run_command(SPHINX_ARGS + ['--version'],
- check: true).stdout().split()[1]
- if sphinx_version.version_compare('>=1.7.0')
- SPHINX_ARGS += ['-j', 'auto']
- else
- nproc = find_program('nproc')
- if nproc.found()
- jobs = run_command(nproc, check: true).stdout()
- SPHINX_ARGS += ['-j', jobs]
- endif
- endif
-
# This is a bit awkward but works: create a trivial document and
# try to run it with our configuration file (which enforces a
# version requirement). This will fail if sphinx-build is too old.
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* [PULL 24/24] target/s390x: add gen-features.h dependency to s390x_system_ss
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (22 preceding siblings ...)
2026-05-11 20:21 ` [PULL 23/24] meson: drop sphinx-build < 1.7 compatiblity check marcandre.lureau
@ 2026-05-11 20:21 ` marcandre.lureau
2026-05-12 23:19 ` [PULL 00/24] Qom patches Stefan Hajnoczi
2026-05-14 16:26 ` Stefan Hajnoczi
25 siblings, 0 replies; 31+ messages in thread
From: marcandre.lureau @ 2026-05-11 20:21 UTC (permalink / raw)
To: qemu-devel
Cc: stefanha, Marc-André Lureau, Richard Henderson,
Ilya Leoshkevich, David Hildenbrand, Cornelia Huck, Eric Farman,
Matthew Rosato, open list:S390 TCG CPUs
From: Marc-André Lureau <marcandre.lureau@redhat.com>
Commit 0b83acf2f05 moved gen_features_h from s390x_ss to
s390x_common_ss. However s390x_system_ss (containing ioinst.c) was left
without the dependency, causing a build race: it can be compiled before
gen-features.h is generated (via cpu.h -> cpu_models.h -> cpu_features.h
-> gen-features.h)
Add gen_features_h to s390x_system_ss to correct the build ordering.
Fixes: 0b83acf2f05 ("target/s390x: Introduce common system/user meson source set")
Acked-by: Eric Farman <farman@linux.ibm.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org>
Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com>
---
target/s390x/meson.build | 1 +
1 file changed, 1 insertion(+)
diff --git a/target/s390x/meson.build b/target/s390x/meson.build
index 44f58ac2919..bc4459e8ed7 100644
--- a/target/s390x/meson.build
+++ b/target/s390x/meson.build
@@ -26,6 +26,7 @@ s390x_common_ss.add(files(
'gdbstub.c',
))
+s390x_system_ss.add(gen_features_h)
s390x_system_ss.add(files(
'ioinst.c',
))
--
2.54.0
^ permalink raw reply related [flat|nested] 31+ messages in thread
* Re: [PULL 00/24] Qom patches
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (23 preceding siblings ...)
2026-05-11 20:21 ` [PULL 24/24] target/s390x: add gen-features.h dependency to s390x_system_ss marcandre.lureau
@ 2026-05-12 23:19 ` Stefan Hajnoczi
2026-05-13 7:49 ` Marc-André Lureau
2026-05-14 16:26 ` Stefan Hajnoczi
25 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2026-05-12 23:19 UTC (permalink / raw)
To: marcandre.lureau; +Cc: qemu-devel, stefanha
On Mon, May 11, 2026 at 4:21 PM <marcandre.lureau@redhat.com> wrote:
>
> From: Marc-André Lureau <marcandre.lureau@redhat.com>
>
> The following changes since commit 5e61afe211e82a9af15a8794a0bd29bb574e953b:
>
> Merge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging (2026-05-11 10:49:53 -0400)
>
> are available in the Git repository at:
>
> https://gitlab.com/marcandre.lureau/qemu.git tags/qom-pull-request
>
> for you to fetch changes up to bc61a3209bf064826481a5f8f2b4feb47c70b02f:
>
> target/s390x: add gen-features.h dependency to s390x_system_ss (2026-05-11 23:59:33 +0400)
>
> ----------------------------------------------------------------
> QOM object lifecycle fixes
>
> ----------------------------------------------------------------
Hi Marc-André,
I'm not sure if this CI failure is related to this pull request, but
there is a dbus-vnc issue:
>>> ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 QTEST_QEMU_VNC_BINARY=./tools/qemu-vnc/qemu-vnc MESON_TEST_ITERATION=1 PYTHON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/pyvenv/bin/python3 QTEST_QEMU_STORAGE_DAEMON_BINARY=./storage-daemon/qemu-storage-daemon G_TEST_DBUS_DAEMON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/tests/dbus-daemon.sh QTEST_QEMU_IMG=./qemu-img QTEST_QEMU_BINARY=./qemu-system-x86_64 UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 RUST_BACKTRACE=1 MALLOC_PERTURB_=211 MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 /home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/tests/qtest/dbus-vnc-test --tap -k
754/1075 /x86_64/dbus-vnc/password-auth -
ERROR:../tests/qtest/dbus-vnc-test.c:621:test_dbus_vnc_password_auth:
assertion failed (qemu_vnc1_server_get_auth(proxy) == "vnc"): ("none"
== "vnc") FAIL
https://gitlab.com/qemu-project/qemu/-/jobs/14337427774#L5512
Any ideas?
Stefan
>
> Marc-André Lureau (23):
> hw/remote: check visit return in vfu_object_set_socket
> qom/object: update doc about NULL values in link properties
> hw/remote: guard listener unregister in finalize
> io/net-listener: move mutex init to instance_init
> net/colo-compare: guard finalize against uninitialized state
> ui/console: remove console from global list on finalization
> hw/i386/x86: free oem_id and oem_table_id on finalization
> hw/core/resetcontainer: free children array on finalization
> net/can: free ifname on socketcan finalization
> backends/igvm-cfg: free filename on finalization
> scsi/pr-manager-helper: free path on finalization
> accel/kvm: free device path on finalization
> system/qtest: add missing qtest_finalize()
> hw/fsi: move OPBus address space init to realize
> hw/fsi: move OPBus qbus_init() to instance_init
> hw/gpio/pca9552: fix state_str leak in pca955x_set_led
> hw/arm/aspeed: free fmc_model and spi_model on finalization
> hw/arm/sbsa-ref: free unrealized flash devices on finalization
> hw/arm/virt: free flash devices and OEM strings on finalization
> hw/ppc/pnv: drop extra ref on PHB after adding as child
> hw/riscv/virt: free flash devices and OEM strings on finalization
> meson: drop sphinx-build < 1.7 compatiblity check
> target/s390x: add gen-features.h dependency to s390x_system_ss
>
> Peter Xu (1):
> system/ioport: Fix qom-list-properties crash on portio list obj
>
> docs/meson.build | 14 +-------------
> include/qom/object.h | 8 ++++----
> accel/kvm/kvm-all.c | 8 ++++++++
> backends/igvm-cfg.c | 1 +
> hw/arm/aspeed.c | 9 +++++++++
> hw/arm/sbsa-ref.c | 12 ++++++++++++
> hw/arm/virt.c | 14 ++++++++++++++
> hw/core/resetcontainer.c | 3 +++
> hw/fsi/aspeed_apb2opb.c | 37 ++++++++++++++++++++++++-------------
> hw/gpio/pca9552.c | 2 +-
> hw/i386/x86.c | 9 +++++++++
> hw/ppc/pnv.c | 1 +
> hw/remote/remote-obj.c | 4 +++-
> hw/remote/vfio-user-obj.c | 4 +++-
> hw/riscv/virt.c | 14 ++++++++++++++
> io/net-listener.c | 9 ++++++++-
> net/can/can_socketcan.c | 8 ++++++++
> net/colo-compare.c | 31 +++++++++++++++----------------
> scsi/pr-manager-helper.c | 1 +
> system/ioport.c | 11 +++++++++--
> system/qtest.c | 10 ++++++++++
> ui/console.c | 5 ++++-
> target/s390x/meson.build | 1 +
> 23 files changed, 163 insertions(+), 53 deletions(-)
>
> --
> 2.54.0
>
>
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 00/24] Qom patches
2026-05-12 23:19 ` [PULL 00/24] Qom patches Stefan Hajnoczi
@ 2026-05-13 7:49 ` Marc-André Lureau
2026-05-13 19:04 ` Stefan Hajnoczi
0 siblings, 1 reply; 31+ messages in thread
From: Marc-André Lureau @ 2026-05-13 7:49 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: qemu-devel, stefanha
Hi Stefan
On Wed, May 13, 2026 at 3:20 AM Stefan Hajnoczi <stefanha@gmail.com> wrote:
>
> On Mon, May 11, 2026 at 4:21 PM <marcandre.lureau@redhat.com> wrote:
> >
> > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> >
> > The following changes since commit 5e61afe211e82a9af15a8794a0bd29bb574e953b:
> >
> > Merge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging (2026-05-11 10:49:53 -0400)
> >
> > are available in the Git repository at:
> >
> > https://gitlab.com/marcandre.lureau/qemu.git tags/qom-pull-request
> >
> > for you to fetch changes up to bc61a3209bf064826481a5f8f2b4feb47c70b02f:
> >
> > target/s390x: add gen-features.h dependency to s390x_system_ss (2026-05-11 23:59:33 +0400)
> >
> > ----------------------------------------------------------------
> > QOM object lifecycle fixes
> >
> > ----------------------------------------------------------------
>
> Hi Marc-André,
> I'm not sure if this CI failure is related to this pull request, but
> there is a dbus-vnc issue:
>
> >>> ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 QTEST_QEMU_VNC_BINARY=./tools/qemu-vnc/qemu-vnc MESON_TEST_ITERATION=1 PYTHON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/pyvenv/bin/python3 QTEST_QEMU_STORAGE_DAEMON_BINARY=./storage-daemon/qemu-storage-daemon G_TEST_DBUS_DAEMON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/tests/dbus-daemon.sh QTEST_QEMU_IMG=./qemu-img QTEST_QEMU_BINARY=./qemu-system-x86_64 UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 RUST_BACKTRACE=1 MALLOC_PERTURB_=211 MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 /home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/tests/qtest/dbus-vnc-test --tap -k
>
> 754/1075 /x86_64/dbus-vnc/password-auth -
> ERROR:../tests/qtest/dbus-vnc-test.c:621:test_dbus_vnc_password_auth:
> assertion failed (qemu_vnc1_server_get_auth(proxy) == "vnc"): ("none"
> == "vnc") FAIL
>
> https://gitlab.com/qemu-project/qemu/-/jobs/14337427774#L5512
>
> Any ideas?
Embarrassingly, I have no idea. Before org.qemu.vnc is exposed by
qemu-vnc (and the auth is checked by the test), qemu-vnc must have
started a VNC server successfully (vnc_display_new)..
Fwiw, the tests runs quite smoothly locally with meson test --repeat
1000 (some time out sometime, due to heavy load).
Let's mark/run it as QEMU_TEST_FLAKY_TESTS until I figure out?
>
> Stefan
>
> >
> > Marc-André Lureau (23):
> > hw/remote: check visit return in vfu_object_set_socket
> > qom/object: update doc about NULL values in link properties
> > hw/remote: guard listener unregister in finalize
> > io/net-listener: move mutex init to instance_init
> > net/colo-compare: guard finalize against uninitialized state
> > ui/console: remove console from global list on finalization
> > hw/i386/x86: free oem_id and oem_table_id on finalization
> > hw/core/resetcontainer: free children array on finalization
> > net/can: free ifname on socketcan finalization
> > backends/igvm-cfg: free filename on finalization
> > scsi/pr-manager-helper: free path on finalization
> > accel/kvm: free device path on finalization
> > system/qtest: add missing qtest_finalize()
> > hw/fsi: move OPBus address space init to realize
> > hw/fsi: move OPBus qbus_init() to instance_init
> > hw/gpio/pca9552: fix state_str leak in pca955x_set_led
> > hw/arm/aspeed: free fmc_model and spi_model on finalization
> > hw/arm/sbsa-ref: free unrealized flash devices on finalization
> > hw/arm/virt: free flash devices and OEM strings on finalization
> > hw/ppc/pnv: drop extra ref on PHB after adding as child
> > hw/riscv/virt: free flash devices and OEM strings on finalization
> > meson: drop sphinx-build < 1.7 compatiblity check
> > target/s390x: add gen-features.h dependency to s390x_system_ss
> >
> > Peter Xu (1):
> > system/ioport: Fix qom-list-properties crash on portio list obj
> >
> > docs/meson.build | 14 +-------------
> > include/qom/object.h | 8 ++++----
> > accel/kvm/kvm-all.c | 8 ++++++++
> > backends/igvm-cfg.c | 1 +
> > hw/arm/aspeed.c | 9 +++++++++
> > hw/arm/sbsa-ref.c | 12 ++++++++++++
> > hw/arm/virt.c | 14 ++++++++++++++
> > hw/core/resetcontainer.c | 3 +++
> > hw/fsi/aspeed_apb2opb.c | 37 ++++++++++++++++++++++++-------------
> > hw/gpio/pca9552.c | 2 +-
> > hw/i386/x86.c | 9 +++++++++
> > hw/ppc/pnv.c | 1 +
> > hw/remote/remote-obj.c | 4 +++-
> > hw/remote/vfio-user-obj.c | 4 +++-
> > hw/riscv/virt.c | 14 ++++++++++++++
> > io/net-listener.c | 9 ++++++++-
> > net/can/can_socketcan.c | 8 ++++++++
> > net/colo-compare.c | 31 +++++++++++++++----------------
> > scsi/pr-manager-helper.c | 1 +
> > system/ioport.c | 11 +++++++++--
> > system/qtest.c | 10 ++++++++++
> > ui/console.c | 5 ++++-
> > target/s390x/meson.build | 1 +
> > 23 files changed, 163 insertions(+), 53 deletions(-)
> >
> > --
> > 2.54.0
> >
> >
>
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 00/24] Qom patches
2026-05-13 7:49 ` Marc-André Lureau
@ 2026-05-13 19:04 ` Stefan Hajnoczi
2026-05-13 19:16 ` Marc-André Lureau
0 siblings, 1 reply; 31+ messages in thread
From: Stefan Hajnoczi @ 2026-05-13 19:04 UTC (permalink / raw)
To: Marc-André Lureau; +Cc: qemu-devel, stefanha
On Wed, May 13, 2026 at 3:49 AM Marc-André Lureau
<marcandre.lureau@redhat.com> wrote:
>
> Hi Stefan
>
> On Wed, May 13, 2026 at 3:20 AM Stefan Hajnoczi <stefanha@gmail.com> wrote:
> >
> > On Mon, May 11, 2026 at 4:21 PM <marcandre.lureau@redhat.com> wrote:
> > >
> > > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> > >
> > > The following changes since commit 5e61afe211e82a9af15a8794a0bd29bb574e953b:
> > >
> > > Merge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging (2026-05-11 10:49:53 -0400)
> > >
> > > are available in the Git repository at:
> > >
> > > https://gitlab.com/marcandre.lureau/qemu.git tags/qom-pull-request
> > >
> > > for you to fetch changes up to bc61a3209bf064826481a5f8f2b4feb47c70b02f:
> > >
> > > target/s390x: add gen-features.h dependency to s390x_system_ss (2026-05-11 23:59:33 +0400)
> > >
> > > ----------------------------------------------------------------
> > > QOM object lifecycle fixes
> > >
> > > ----------------------------------------------------------------
> >
> > Hi Marc-André,
> > I'm not sure if this CI failure is related to this pull request, but
> > there is a dbus-vnc issue:
> >
> > >>> ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 QTEST_QEMU_VNC_BINARY=./tools/qemu-vnc/qemu-vnc MESON_TEST_ITERATION=1 PYTHON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/pyvenv/bin/python3 QTEST_QEMU_STORAGE_DAEMON_BINARY=./storage-daemon/qemu-storage-daemon G_TEST_DBUS_DAEMON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/tests/dbus-daemon.sh QTEST_QEMU_IMG=./qemu-img QTEST_QEMU_BINARY=./qemu-system-x86_64 UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 RUST_BACKTRACE=1 MALLOC_PERTURB_=211 MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 /home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/tests/qtest/dbus-vnc-test --tap -k
> >
> > 754/1075 /x86_64/dbus-vnc/password-auth -
> > ERROR:../tests/qtest/dbus-vnc-test.c:621:test_dbus_vnc_password_auth:
> > assertion failed (qemu_vnc1_server_get_auth(proxy) == "vnc"): ("none"
> > == "vnc") FAIL
> >
> > https://gitlab.com/qemu-project/qemu/-/jobs/14337427774#L5512
> >
> > Any ideas?
>
> Embarrassingly, I have no idea. Before org.qemu.vnc is exposed by
> qemu-vnc (and the auth is checked by the test), qemu-vnc must have
> started a VNC server successfully (vnc_display_new)..
>
> Fwiw, the tests runs quite smoothly locally with meson test --repeat
> 1000 (some time out sometime, due to heavy load).
>
> Let's mark/run it as QEMU_TEST_FLAKY_TESTS until I figure out?
If it helps, your last ui pull request seems to be the first
occurrence of this failure:
https://gitlab.com/qemu-project/qemu/-/commit/5e61afe211e82a9af15a8794a0bd29bb574e953b
If you'd like me to run CI on a test branch, just let me know.
Stefan
>
>
> >
> > Stefan
> >
> > >
> > > Marc-André Lureau (23):
> > > hw/remote: check visit return in vfu_object_set_socket
> > > qom/object: update doc about NULL values in link properties
> > > hw/remote: guard listener unregister in finalize
> > > io/net-listener: move mutex init to instance_init
> > > net/colo-compare: guard finalize against uninitialized state
> > > ui/console: remove console from global list on finalization
> > > hw/i386/x86: free oem_id and oem_table_id on finalization
> > > hw/core/resetcontainer: free children array on finalization
> > > net/can: free ifname on socketcan finalization
> > > backends/igvm-cfg: free filename on finalization
> > > scsi/pr-manager-helper: free path on finalization
> > > accel/kvm: free device path on finalization
> > > system/qtest: add missing qtest_finalize()
> > > hw/fsi: move OPBus address space init to realize
> > > hw/fsi: move OPBus qbus_init() to instance_init
> > > hw/gpio/pca9552: fix state_str leak in pca955x_set_led
> > > hw/arm/aspeed: free fmc_model and spi_model on finalization
> > > hw/arm/sbsa-ref: free unrealized flash devices on finalization
> > > hw/arm/virt: free flash devices and OEM strings on finalization
> > > hw/ppc/pnv: drop extra ref on PHB after adding as child
> > > hw/riscv/virt: free flash devices and OEM strings on finalization
> > > meson: drop sphinx-build < 1.7 compatiblity check
> > > target/s390x: add gen-features.h dependency to s390x_system_ss
> > >
> > > Peter Xu (1):
> > > system/ioport: Fix qom-list-properties crash on portio list obj
> > >
> > > docs/meson.build | 14 +-------------
> > > include/qom/object.h | 8 ++++----
> > > accel/kvm/kvm-all.c | 8 ++++++++
> > > backends/igvm-cfg.c | 1 +
> > > hw/arm/aspeed.c | 9 +++++++++
> > > hw/arm/sbsa-ref.c | 12 ++++++++++++
> > > hw/arm/virt.c | 14 ++++++++++++++
> > > hw/core/resetcontainer.c | 3 +++
> > > hw/fsi/aspeed_apb2opb.c | 37 ++++++++++++++++++++++++-------------
> > > hw/gpio/pca9552.c | 2 +-
> > > hw/i386/x86.c | 9 +++++++++
> > > hw/ppc/pnv.c | 1 +
> > > hw/remote/remote-obj.c | 4 +++-
> > > hw/remote/vfio-user-obj.c | 4 +++-
> > > hw/riscv/virt.c | 14 ++++++++++++++
> > > io/net-listener.c | 9 ++++++++-
> > > net/can/can_socketcan.c | 8 ++++++++
> > > net/colo-compare.c | 31 +++++++++++++++----------------
> > > scsi/pr-manager-helper.c | 1 +
> > > system/ioport.c | 11 +++++++++--
> > > system/qtest.c | 10 ++++++++++
> > > ui/console.c | 5 ++++-
> > > target/s390x/meson.build | 1 +
> > > 23 files changed, 163 insertions(+), 53 deletions(-)
> > >
> > > --
> > > 2.54.0
> > >
> > >
> >
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 00/24] Qom patches
2026-05-13 19:04 ` Stefan Hajnoczi
@ 2026-05-13 19:16 ` Marc-André Lureau
2026-05-13 19:20 ` Stefan Hajnoczi
0 siblings, 1 reply; 31+ messages in thread
From: Marc-André Lureau @ 2026-05-13 19:16 UTC (permalink / raw)
To: Stefan Hajnoczi; +Cc: qemu-devel, stefanha
Hi
On Wed, May 13, 2026 at 11:05 PM Stefan Hajnoczi <stefanha@gmail.com> wrote:
>
> On Wed, May 13, 2026 at 3:49 AM Marc-André Lureau
> <marcandre.lureau@redhat.com> wrote:
> >
> > Hi Stefan
> >
> > On Wed, May 13, 2026 at 3:20 AM Stefan Hajnoczi <stefanha@gmail.com> wrote:
> > >
> > > On Mon, May 11, 2026 at 4:21 PM <marcandre.lureau@redhat.com> wrote:
> > > >
> > > > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> > > >
> > > > The following changes since commit 5e61afe211e82a9af15a8794a0bd29bb574e953b:
> > > >
> > > > Merge tag 'ui-pull-request' of https://gitlab.com/marcandre.lureau/qemu into staging (2026-05-11 10:49:53 -0400)
> > > >
> > > > are available in the Git repository at:
> > > >
> > > > https://gitlab.com/marcandre.lureau/qemu.git tags/qom-pull-request
> > > >
> > > > for you to fetch changes up to bc61a3209bf064826481a5f8f2b4feb47c70b02f:
> > > >
> > > > target/s390x: add gen-features.h dependency to s390x_system_ss (2026-05-11 23:59:33 +0400)
> > > >
> > > > ----------------------------------------------------------------
> > > > QOM object lifecycle fixes
> > > >
> > > > ----------------------------------------------------------------
> > >
> > > Hi Marc-André,
> > > I'm not sure if this CI failure is related to this pull request, but
> > > there is a dbus-vnc issue:
> > >
> > > >>> ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1 QTEST_QEMU_VNC_BINARY=./tools/qemu-vnc/qemu-vnc MESON_TEST_ITERATION=1 PYTHON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/pyvenv/bin/python3 QTEST_QEMU_STORAGE_DAEMON_BINARY=./storage-daemon/qemu-storage-daemon G_TEST_DBUS_DAEMON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/tests/dbus-daemon.sh QTEST_QEMU_IMG=./qemu-img QTEST_QEMU_BINARY=./qemu-system-x86_64 UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 RUST_BACKTRACE=1 MALLOC_PERTURB_=211 MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1 /home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/tests/qtest/dbus-vnc-test --tap -k
> > >
> > > 754/1075 /x86_64/dbus-vnc/password-auth -
> > > ERROR:../tests/qtest/dbus-vnc-test.c:621:test_dbus_vnc_password_auth:
> > > assertion failed (qemu_vnc1_server_get_auth(proxy) == "vnc"): ("none"
> > > == "vnc") FAIL
> > >
> > > https://gitlab.com/qemu-project/qemu/-/jobs/14337427774#L5512
> > >
> > > Any ideas?
> >
> > Embarrassingly, I have no idea. Before org.qemu.vnc is exposed by
> > qemu-vnc (and the auth is checked by the test), qemu-vnc must have
> > started a VNC server successfully (vnc_display_new)..
> >
> > Fwiw, the tests runs quite smoothly locally with meson test --repeat
> > 1000 (some time out sometime, due to heavy load).
> >
> > Let's mark/run it as QEMU_TEST_FLAKY_TESTS until I figure out?
>
> If it helps, your last ui pull request seems to be the first
> occurrence of this failure:
> https://gitlab.com/qemu-project/qemu/-/commit/5e61afe211e82a9af15a8794a0bd29bb574e953b
>
> If you'd like me to run CI on a test branch, just let me know.
It's new code, from the patches introducing qemu-vnc & the test. Let's
just skip the test for now by default.
(https://patchew.org/QEMU/20260513082517.1720433-1-marcandre.lureau@redhat.com/)
Would you like me to send a new PR?
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 00/24] Qom patches
2026-05-13 19:16 ` Marc-André Lureau
@ 2026-05-13 19:20 ` Stefan Hajnoczi
0 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2026-05-13 19:20 UTC (permalink / raw)
To: Marc-André Lureau; +Cc: qemu-devel, Stefan Hajnoczi
[-- Attachment #1: Type: text/plain, Size: 3740 bytes --]
On Wed, May 13, 2026, 15:16 Marc-André Lureau <marcandre.lureau@redhat.com>
wrote:
> Hi
>
> On Wed, May 13, 2026 at 11:05 PM Stefan Hajnoczi <stefanha@gmail.com>
> wrote:
> >
> > On Wed, May 13, 2026 at 3:49 AM Marc-André Lureau
> > <marcandre.lureau@redhat.com> wrote:
> > >
> > > Hi Stefan
> > >
> > > On Wed, May 13, 2026 at 3:20 AM Stefan Hajnoczi <stefanha@gmail.com>
> wrote:
> > > >
> > > > On Mon, May 11, 2026 at 4:21 PM <marcandre.lureau@redhat.com> wrote:
> > > > >
> > > > > From: Marc-André Lureau <marcandre.lureau@redhat.com>
> > > > >
> > > > > The following changes since commit
> 5e61afe211e82a9af15a8794a0bd29bb574e953b:
> > > > >
> > > > > Merge tag 'ui-pull-request' of
> https://gitlab.com/marcandre.lureau/qemu into staging (2026-05-11
> 10:49:53 -0400)
> > > > >
> > > > > are available in the Git repository at:
> > > > >
> > > > > https://gitlab.com/marcandre.lureau/qemu.git
> tags/qom-pull-request
> > > > >
> > > > > for you to fetch changes up to
> bc61a3209bf064826481a5f8f2b4feb47c70b02f:
> > > > >
> > > > > target/s390x: add gen-features.h dependency to s390x_system_ss
> (2026-05-11 23:59:33 +0400)
> > > > >
> > > > > ----------------------------------------------------------------
> > > > > QOM object lifecycle fixes
> > > > >
> > > > > ----------------------------------------------------------------
> > > >
> > > > Hi Marc-André,
> > > > I'm not sure if this CI failure is related to this pull request, but
> > > > there is a dbus-vnc issue:
> > > >
> > > > >>> ASAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1
> QTEST_QEMU_VNC_BINARY=./tools/qemu-vnc/qemu-vnc MESON_TEST_ITERATION=1
> PYTHON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/pyvenv/bin/python3
> QTEST_QEMU_STORAGE_DAEMON_BINARY=./storage-daemon/qemu-storage-daemon
> G_TEST_DBUS_DAEMON=/home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/tests/dbus-daemon.sh
> QTEST_QEMU_IMG=./qemu-img QTEST_QEMU_BINARY=./qemu-system-x86_64
> UBSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1
> RUST_BACKTRACE=1 MALLOC_PERTURB_=211
> MSAN_OPTIONS=halt_on_error=1:abort_on_error=1:print_summary=1:print_stacktrace=1
> /home/gitlab-runner/builds/P3MFS4LUf/0/qemu-project/qemu/build/tests/qtest/dbus-vnc-test
> --tap -k
> > > >
> > > > 754/1075 /x86_64/dbus-vnc/password-auth -
> > > > ERROR:../tests/qtest/dbus-vnc-test.c:621:test_dbus_vnc_password_auth:
> > > > assertion failed (qemu_vnc1_server_get_auth(proxy) == "vnc"): ("none"
> > > > == "vnc") FAIL
> > > >
> > > > https://gitlab.com/qemu-project/qemu/-/jobs/14337427774#L5512
> > > >
> > > > Any ideas?
> > >
> > > Embarrassingly, I have no idea. Before org.qemu.vnc is exposed by
> > > qemu-vnc (and the auth is checked by the test), qemu-vnc must have
> > > started a VNC server successfully (vnc_display_new)..
> > >
> > > Fwiw, the tests runs quite smoothly locally with meson test --repeat
> > > 1000 (some time out sometime, due to heavy load).
> > >
> > > Let's mark/run it as QEMU_TEST_FLAKY_TESTS until I figure out?
> >
> > If it helps, your last ui pull request seems to be the first
> > occurrence of this failure:
> >
> https://gitlab.com/qemu-project/qemu/-/commit/5e61afe211e82a9af15a8794a0bd29bb574e953b
> >
> > If you'd like me to run CI on a test branch, just let me know.
>
> It's new code, from the patches introducing qemu-vnc & the test. Let's
> just skip the test for now by default.
> (
> https://patchew.org/QEMU/20260513082517.1720433-1-marcandre.lureau@redhat.com/
> )
> Would you like me to send a new PR?
>
No, it's okay. I can merge your patch directly into master.
Stefan
>
[-- Attachment #2: Type: text/html, Size: 6018 bytes --]
^ permalink raw reply [flat|nested] 31+ messages in thread
* Re: [PULL 00/24] Qom patches
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
` (24 preceding siblings ...)
2026-05-12 23:19 ` [PULL 00/24] Qom patches Stefan Hajnoczi
@ 2026-05-14 16:26 ` Stefan Hajnoczi
25 siblings, 0 replies; 31+ messages in thread
From: Stefan Hajnoczi @ 2026-05-14 16:26 UTC (permalink / raw)
To: marcandre.lureau; +Cc: qemu-devel, stefanha, Marc-André Lureau
[-- Attachment #1: Type: text/plain, Size: 116 bytes --]
Applied, thanks.
Please update the changelog at https://wiki.qemu.org/ChangeLog/11.1 for any user-visible changes.
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply [flat|nested] 31+ messages in thread
end of thread, other threads:[~2026-05-14 18:23 UTC | newest]
Thread overview: 31+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-11 20:20 [PULL 00/24] Qom patches marcandre.lureau
2026-05-11 20:20 ` [PULL 01/24] hw/remote: check visit return in vfu_object_set_socket marcandre.lureau
2026-05-11 20:20 ` [PULL 02/24] qom/object: update doc about NULL values in link properties marcandre.lureau
2026-05-11 20:20 ` [PULL 03/24] hw/remote: guard listener unregister in finalize marcandre.lureau
2026-05-11 20:20 ` [PULL 04/24] io/net-listener: move mutex init to instance_init marcandre.lureau
2026-05-11 20:20 ` [PULL 05/24] net/colo-compare: guard finalize against uninitialized state marcandre.lureau
2026-05-11 20:20 ` [PULL 06/24] system/ioport: Fix qom-list-properties crash on portio list obj marcandre.lureau
2026-05-11 20:20 ` [PULL 07/24] ui/console: remove console from global list on finalization marcandre.lureau
2026-05-11 20:20 ` [PULL 08/24] hw/i386/x86: free oem_id and oem_table_id " marcandre.lureau
2026-05-11 20:20 ` [PULL 09/24] hw/core/resetcontainer: free children array " marcandre.lureau
2026-05-11 20:20 ` [PULL 10/24] net/can: free ifname on socketcan finalization marcandre.lureau
2026-05-11 20:20 ` [PULL 11/24] backends/igvm-cfg: free filename on finalization marcandre.lureau
2026-05-11 20:20 ` [PULL 12/24] scsi/pr-manager-helper: free path " marcandre.lureau
2026-05-11 20:20 ` [PULL 13/24] accel/kvm: free device " marcandre.lureau
2026-05-11 20:21 ` [PULL 14/24] system/qtest: add missing qtest_finalize() marcandre.lureau
2026-05-11 20:21 ` [PULL 15/24] hw/fsi: move OPBus address space init to realize marcandre.lureau
2026-05-11 20:21 ` [PULL 16/24] hw/fsi: move OPBus qbus_init() to instance_init marcandre.lureau
2026-05-11 20:21 ` [PULL 17/24] hw/gpio/pca9552: fix state_str leak in pca955x_set_led marcandre.lureau
2026-05-11 20:21 ` [PULL 18/24] hw/arm/aspeed: free fmc_model and spi_model on finalization marcandre.lureau
2026-05-11 20:21 ` [PULL 19/24] hw/arm/sbsa-ref: free unrealized flash devices " marcandre.lureau
2026-05-11 20:21 ` [PULL 20/24] hw/arm/virt: free flash devices and OEM strings " marcandre.lureau
2026-05-11 20:21 ` [PULL 21/24] hw/ppc/pnv: drop extra ref on PHB after adding as child marcandre.lureau
2026-05-11 20:21 ` [PULL 22/24] hw/riscv/virt: free flash devices and OEM strings on finalization marcandre.lureau
2026-05-11 20:21 ` [PULL 23/24] meson: drop sphinx-build < 1.7 compatiblity check marcandre.lureau
2026-05-11 20:21 ` [PULL 24/24] target/s390x: add gen-features.h dependency to s390x_system_ss marcandre.lureau
2026-05-12 23:19 ` [PULL 00/24] Qom patches Stefan Hajnoczi
2026-05-13 7:49 ` Marc-André Lureau
2026-05-13 19:04 ` Stefan Hajnoczi
2026-05-13 19:16 ` Marc-André Lureau
2026-05-13 19:20 ` Stefan Hajnoczi
2026-05-14 16:26 ` Stefan Hajnoczi
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.