summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2026-08-18 16:23:54 +0200
committerMichael Tokarev <mjt@tls.msk.ru>2026-08-21 13:00:54 +0300
commitd1f8bfb5bc3e2eae15235944abb6e55b92e4fe90 (patch)
treee95dfdd007e6ba561ba7e9be2ee7f9712f8642fb
parent3d59577e1e6ed4824011dcc4573d97ed482f3b93 (diff)
downloadqemu-d1f8bfb5bc3e2eae15235944abb6e55b92e4fe90.tar.gz
qemu-d1f8bfb5bc3e2eae15235944abb6e55b92e4fe90.zip
serial: clear transmit retry callback on unrealize
The GSource is removed when resetting but remains active (and can cause use-after-free) on hot-unplug. Remove it before the character device is disconnected. Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/4125 Reviewed-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> (cherry picked from commit eb3f7fe382babbab44419603e81da56abb91d11a) Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
-rw-r--r--hw/char/serial.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/hw/char/serial.c b/hw/char/serial.c
index 0f3469a1e8..1174e0e38a 100644
--- a/hw/char/serial.c
+++ b/hw/char/serial.c
@@ -940,6 +940,7 @@ static void serial_unrealize(DeviceState *dev)
{
SerialState *s = SERIAL(dev);
+ g_clear_handle_id(&s->watch_tag, g_source_remove);
qemu_chr_fe_deinit(&s->chr, false);
timer_free(s->modem_status_poll);