virt-viewer/src
Victor Toso a13173ae64 remote-viewer: fix free on dangling pointer
On remote_viewer_session_connected() we are passing a dup of URI of
connection and freeing it afterwards. Problem is, we don't disconnect
from listening "session-connected" and on an eventual second emission
of this signal, remote-viewer crashes as seen in the backtrace below.

This can happen over switch-host migration message from
SpiceMainChannel.

A fix trying to use VirtViewerApp URI avoid the crash but introduces
regression while running remote-viewer with ovirt so, keeping the
changes to a minimum to avoid it, just use g_intern_string() for now.

Found it while improving migrate.py from spice/tests (server):
 | Invalid free() / delete / delete[] / realloc()
 |    at 0x4839A0C: free (vg_replace_malloc.c:540)
 |    by 0x56EBD8C: g_free (in /usr/lib64/libglib-2.0.so.0.6000.6)
 |    by 0x11DED0: remote_viewer_session_connected (remote-viewer.c:658)
 |    by 0x564D741: g_closure_invoke (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x56614F3: ??? (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x566A34D: g_signal_emit_valist (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x566AF68: g_signal_emit_by_name (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x135E5D: virt_viewer_session_spice_main_channel_event (virt-viewer-session-spice.c:699)
 |    by 0x564D741: g_closure_invoke (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x56614F3: ??? (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x566A34D: g_signal_emit_valist (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x53149E3: emit_main_context (gio-coroutine.c:198)
 |  Address 0x18f1ecc0 is 0 bytes inside a block of size 23 free'd
 |    at 0x4839A0C: free (vg_replace_malloc.c:540)
 |    by 0x56EBD8C: g_free (in /usr/lib64/libglib-2.0.so.0.6000.6)
 |    by 0x11DED0: remote_viewer_session_connected (remote-viewer.c:658)
 |    by 0x564D741: g_closure_invoke (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x56614F3: ??? (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x566A34D: g_signal_emit_valist (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x566AF68: g_signal_emit_by_name (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x135E5D: virt_viewer_session_spice_main_channel_event (virt-viewer-session-spice.c:699)
 |    by 0x564D741: g_closure_invoke (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x56614F3: ??? (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x566A34D: g_signal_emit_valist (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x53149E3: emit_main_context (gio-coroutine.c:198)
 |  Block was alloc'd at
 |    at 0x483880B: malloc (vg_replace_malloc.c:309)
 |    by 0x56EBC98: g_malloc (in /usr/lib64/libglib-2.0.so.0.6000.6)
 |    by 0x5705C43: g_strdup (in /usr/lib64/libglib-2.0.so.0.6000.6)
 |    by 0x11EB80: remote_viewer_initial_connect (remote-viewer.c:696)
 |    by 0x11EB80: remote_viewer_start (remote-viewer.c:790)
 |    by 0x1250D3: virt_viewer_app_start (virt-viewer-app.c:1727)
 |    by 0x127108: virt_viewer_app_on_application_startup (virt-viewer-app.c:1870)
 |    by 0x564D741: g_closure_invoke (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x5661638: ??? (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x566A34D: g_signal_emit_valist (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x566A972: g_signal_emit (in /usr/lib64/libgobject-2.0.so.0.6000.6)
 |    by 0x553ECA1: g_application_register (in /usr/lib64/libgio-2.0.so.0.6000.6)
 |    by 0x553F41D: g_application_run (in /usr/lib64/libgio-2.0.so.0.6000.6)

Signed-off-by: Victor Toso <victortoso@redhat.com>
Acked-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
2019-10-04 10:02:42 +02:00
..
resources remote-viewer: Allow toggling shared clipboard 2019-03-07 19:52:00 +01:00
glib-compat.c foreign-menu: Check if storage domain is active for data center 2017-10-06 17:05:58 -03:00
glib-compat.h foreign-menu: Check if storage domain is active for data center 2017-10-06 17:05:58 -03:00
Makefile.am Add a VirtViewerDisplayVte display kind 2018-12-21 15:14:22 +04:00
ovirt-foreign-menu.c ovirt-foreign-menu: Plug memory leak 2019-08-30 11:05:42 -03:00
ovirt-foreign-menu.h ovirt-foreign-menu: Add accessors for current iso and iso list 2017-01-19 13:27:34 -02:00
remote-viewer-connect.c remote-viewer-connect: Keep the 'dialog' window on top 2017-06-12 15:37:28 +02:00
remote-viewer-connect.h remote-viewer-connect: Keep the 'dialog' window on top 2017-06-12 15:37:28 +02:00
remote-viewer-iso-list-dialog.c iso-dialog: Move type definitions from header to source file 2019-02-22 09:19:27 -03:00
remote-viewer-iso-list-dialog.h iso-dialog: Move type definitions from header to source file 2019-02-22 09:19:27 -03:00
remote-viewer-main.c Include virt-viewer-util.h only in source files 2016-05-31 16:52:46 +02:00
remote-viewer.c remote-viewer: fix free on dangling pointer 2019-10-04 10:02:42 +02:00
remote-viewer.h Port to GtkApplication API's 2016-02-18 21:45:56 +01:00
virt-viewer-app.c remote-viewer: Allow toggling shared clipboard 2019-03-07 19:52:00 +01:00
virt-viewer-app.h remote-viewer: Allow toggling shared clipboard 2019-03-07 19:52:00 +01:00
virt-viewer-auth.c ui: Rename UI files to .ui (instead of .xml) 2016-06-20 17:33:53 +02:00
virt-viewer-auth.h Include virt-viewer-util.h only in source files 2016-05-31 16:52:46 +02:00
virt-viewer-display-spice.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer-display-spice.h Fix spice includes 2016-03-24 11:49:39 +01:00
virt-viewer-display-vnc.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer-display-vnc.h VirtViewerDisplayVnc: set 'session' property 2014-09-24 10:21:22 -05:00
virt-viewer-display-vte.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer-display-vte.h Add a VirtViewerDisplayVte display kind 2018-12-21 15:14:22 +04:00
virt-viewer-display.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer-display.h window: set sensitivity based on display capability 2018-12-21 15:14:16 +04:00
virt-viewer-enums.c.etemplate build: generate enums type boilerplate 2012-07-23 16:27:32 +02:00
virt-viewer-enums.h.etemplate build: generate enums type boilerplate 2012-07-23 16:27:32 +02:00
virt-viewer-file-transfer-dialog.c virt-viewer-file-transfer-dialog: improve error message 2019-08-08 15:54:46 +02:00
virt-viewer-file-transfer-dialog.h Add file transfer dialog 2016-05-03 08:04:10 +02:00
virt-viewer-file.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer-file.h spice: add unix-path in .vv file support 2018-12-21 16:53:35 +04:00
virt-viewer-main.c Include virt-viewer-util.h only in source files 2016-05-31 16:52:46 +02:00
virt-viewer-notebook.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer-notebook.h Update copyright headers 2012-02-06 12:42:18 +00:00
virt-viewer-session-spice.c Fix a regression when initial connection fails 2019-04-16 15:19:51 -05:00
virt-viewer-session-spice.h Fix spice includes 2016-03-24 11:49:39 +01:00
virt-viewer-session-vnc.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer-session-vnc.h vnc: add connection by file 2013-01-18 12:28:58 +01:00
virt-viewer-session.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer-session.h app: add "machine" UI 2018-12-21 18:16:39 +04:00
virt-viewer-timed-revealer.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer-timed-revealer.h timed-revealer: Inherit from GtkEventBox 2016-06-29 01:59:45 +02:00
virt-viewer-util.c win32: Look up translations relative to installation directory 2018-05-02 13:20:13 +02:00
virt-viewer-util.h util: Fix resource path 2016-06-21 22:54:12 +02:00
virt-viewer-vm-connection.c Make it clear that only running VMs are listed 2017-09-14 10:48:05 -05:00
virt-viewer-vm-connection.h Set a transient parent for GtkDialogs 2014-12-19 17:39:53 +01:00
virt-viewer-window.c virt-viewer add translatable string 2019-05-28 11:08:02 -03:00
virt-viewer-window.h window: Move definition from header 2016-06-22 11:21:13 +02:00
virt-viewer.c Update usage of GObject private structures 2019-02-22 09:19:27 -03:00
virt-viewer.h Port to GtkApplication API's 2016-02-18 21:45:56 +01:00
virt-viewer.manifest win32: add a few Windows sepecific data 2012-03-30 14:48:13 +02:00
virt-viewer.rc.in Use a more descriptive FileDescription 2013-05-23 17:31:05 +02:00
windows-cmdline-wrapper.c win32: there is no CONERR$, only CONOUT$ 2012-10-23 11:17:04 +02:00