Mike Jumper created GUACAMOLE-1263:
--------------------------------------

             Summary: Double-free may occur upon VNC disconnect
                 Key: GUACAMOLE-1263
                 URL: https://issues.apache.org/jira/browse/GUACAMOLE-1263
             Project: Guacamole
          Issue Type: Bug
          Components: VNC
            Reporter: Mike Jumper


If building against libvncclient 0.9.12 or newer, a double-free error occurs 
upon VNC disconnect:

{code:none}
guacd_1      | guacd[13]: INFO: User "@f4557a45-771a-49c3-a9fd-74f6a3d64ec2" 
disconnected (0 users remain)
guacd_1      | guacd[13]: INFO: Last user of connection 
"$5373b0f7-be98-4941-9d4c-8643cc29b647" disconnected
guacd_1      | guacd[13]: INFO: Internal VNC client disconnected
guacd_1      | *** Error in `/opt/glyptodon/sbin/guacd': double free or 
corruption (out): 0x00007fb698089820 ***
guacd_1      | ======= Backtrace: =========
guacd_1      | /lib64/libc.so.6(+0x81299)[0x7fb6afa3a299]
guacd_1      | 
/opt/glyptodon/lib64/libvncclient.so.1(rfbClientCleanup+0x5b)[0x7fb6aad4e24b]
guacd_1      | 
/opt/glyptodon/lib64/libguac-client-vnc.so(guac_vnc_client_free_handler+0x90)[0x7fb6aaf60800]
guacd_1      | 
/opt/glyptodon/lib64/libguac.so.19(guac_client_free+0x32)[0x7fb6b14902a2]
guacd_1      | /opt/glyptodon/sbin/guacd[0x404375]
guacd_1      | /lib64/libpthread.so.0(+0x7ea5)[0x7fb6b08b8ea5]
guacd_1      | /lib64/libc.so.6(clone+0x6d)[0x7fb6afab796d]
{code}

>From gdb:

{code:none}
(gdb) bt
#0  __GI___libc_free (mem=0x7fbd9806e010) at malloc.c:2941
#1  0x00007fbd935f524b in rfbClientCleanup (client=client@entry=0x7fbd9f088010) 
at /usr/src/debug/libvncserver-LibVNCServer-0.9.13/libvncclient/vncviewer.c:527
#2  0x00007fbd980d7800 in guac_vnc_client_free_handler (client=0x7fbd9400b8a0) 
at client.c:92
#3  0x00007fbd9ee062a2 in guac_client_free (client=0x7fbd9400b8a0) at 
client.c:195
#4  0x0000000000404375 in guacd_client_free_thread (data=0x7fbd992e6b50) at 
proc.c:219
#5  0x00007fbd9e22edd5 in start_thread (arg=0x7fbd899c0700) at 
pthread_create.c:307
#6  0x00007fbd9d42dead in clone () at 
../sysdeps/unix/sysv/linux/x86_64/clone.S:111
(gdb) 
{code}

Checking {{vncviewer.c}} within libvncclient, the free in question is:

{code:none}
if (client->raw_buffer)
  free(client->raw_buffer);
{code}

We are indeed freeing this internally, apparently due to old behavior of 
libvncclient. From {{client.c}} within guacamole-server's VNC support:

{code:none}
/* Free memory not free'd by libvncclient's rfbClientCleanup() */
if (rfb_client->frameBuffer != NULL) free(rfb_client->frameBuffer);
if (rfb_client->raw_buffer != NULL) free(rfb_client->raw_buffer);
if (rfb_client->rcSource != NULL) free(rfb_client->rcSource);
{code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to