Go to file
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
bash-completion Introduce bash completion 2019-06-19 13:42:12 +02:00
build-aux po: minimize & canonicalize translations stored in git 2019-03-12 11:49:41 +00:00
data po: provide custom make rules for po file management 2019-03-12 11:49:38 +00:00
docs docs: fix "make syntaxcheck" 2015-12-01 16:46:07 +01:00
icons Add virt-viewer-usb.png 2014-11-24 14:14:14 +01:00
m4 Introduce bash completion 2019-06-19 13:42:12 +02:00
man remote-viewer: Allow toggling shared clipboard 2019-03-07 19:52:00 +01:00
po po: refresh translations from zanata 2019-03-12 11:49:48 +00:00
src remote-viewer: fix free on dangling pointer 2019-10-04 10:02:42 +02:00
tests tests: improvements to monitor-mapping test 2017-04-11 15:20:14 -05:00
.gitpublish Add a git-publish configuration file 2019-03-04 10:43:39 +00:00
.mailmap update .mailmap 2012-03-01 16:20:25 +01:00
acinclude.m4 Disable -Wcast-function-type warning 2018-07-27 11:50:07 +01:00
AUTHORS.in Auto-generate AUTHORS file from GIT logs 2013-02-13 15:17:57 +00:00
autogen.sh po: provide custom make rules for po file management 2019-03-12 11:49:38 +00:00
cfg.mk Delete browser plugin entirely 2013-03-13 11:47:42 +00:00
ChangeLog Automatically generate changelog from GIT history during make dist 2011-11-07 12:42:15 +00:00
configure.ac Introduce bash completion 2019-06-19 13:42:12 +02:00
COPYING Added COPYING/INSTALL files 2007-08-15 20:22:40 -04:00
git.mk git.mk: fix copyright line and remove use of -o / -a 2015-11-05 14:22:35 +00:00
GNUmakefile Import GNULIB rules for syntax checking code 2012-02-06 12:42:23 +00:00
intltool-extract.in Add support for i18n of the UI 2010-01-11 16:01:20 +00:00
intltool-merge.in Add support for i18n of the UI 2010-01-11 16:01:20 +00:00
intltool-update.in Add support for i18n of the UI 2010-01-11 16:01:20 +00:00
maint.mk Revert "Don't set LC_ALL=C during build as that breaks python apps" 2017-08-14 11:37:07 +01:00
Makefile.am Introduce bash completion 2019-06-19 13:42:12 +02:00
mingw-virt-viewer.spec.in po: provide custom make rules for po file management 2019-03-12 11:49:38 +00:00
NEWS Update NEWS for 8.0 release 2019-03-01 16:43:57 +00:00
prepare-release.sh spec: Drop %{extra_release} 2018-11-13 10:13:25 +01:00
README.md Bump min spice to 0.35 and address deprecation warnings 2018-07-27 11:50:07 +01:00
virt-viewer.spec.in Introduce bash completion 2019-06-19 13:42:12 +02:00

Virt Viewer

Virt Viewer provides a graphical viewer for the guest OS display. At this time is supports guest OS using the VNC or SPICE protocols. Further protocols may be supported in the future as user demand dictates. The viewer can connect directly to both local and remotely hosted guest OS, optionally using SSL/TLS encryption.

Virt Viewer is the GTK3 application. Virt Viewer 3.0 was the last release that supported GTK2.

Virt Viewer uses the GTK-VNC (>= 0.4.0) widget to provide a display of the VNC protocol, which is available from

https://wiki.gnome.org/Projects/gtk-vnc

Virt Viewer uses the SPICE-GTK (>= 0.35) widget to provide a display of the SPICE protocol, which is available from:

https://www.spice-space.org/download.html

Use of either SPICE-GTK or GTK-VNC can be disabled at time of configure, with --without-gtk-vnc or --without-spice-gtk respectively.

Virt Viewer uses libvirt to lookup information about the guest OS display. This is available from

http://libvirt.org/

Further information about the Virt Viewer application can be found on the Virt Manager website:

http://virt-manager.org/

Feedback should be directed to the mailing list at

http://www.redhat.com/mailman/listinfo/virt-tools-list