Bug ID 1099697
Summary gvncviewer segfaults if it cannot connect due to SUSE firewall
Classification openSUSE
Product openSUSE Distribution
Version Leap 42.3
Hardware x86-64
OS Other
Status NEW
Severity Normal
Priority P5 - None
Component GNOME
Assignee bnc-team-gnome@forge.provo.novell.com
Reporter sebastian.parschauer@suse.com
QA Contact qa-bugs@suse.de
Found By L3
Blocker ---

Sometimes I forget to open the VNC server port in the Firewall on the remote
SLES server. It is annoying then that gvncviewer crashes with a segfault.

I install updates every day. System is on update status of today:
* gtk-vnc-tools-0.6.0-3.1.x86_64
* libgtk-vnc-1_0-0-0.6.0-3.1.x86_64

I've collected and analyzed a coredump:

> Program terminated with signal SIGSEGV, Segmentation fault.
> #0  0x00007fa38024bc29 in vnc_connection_open_host_internal (conn=0x148dba0) at vncconnection.c:5404
> 5404	        vnc_connection_set_error(conn, "Unable to connect: %s",
> [Current thread is 1 (Thread 0x7fa380864a40 (LWP 11701))]
> (gdb) bt
> #0  0x00007fa38024bc29 in vnc_connection_open_host_internal (conn=0x148dba0 [VncConnection])
>     at vncconnection.c:5404
> #1  0x00007fa38024bc29 in vnc_connection_coroutine (opaque=<optimized out>) at vncconnection.c:5448
> #2  0x00007fa38024f2eb in coroutine_trampoline (cc=0x148a030) at coroutine_ucontext.c:55
> #3  0x00007fa37e41eb70 in __start_context () at /lib64/libc.so.6
> #4  0x000000000148a3f8 in  ()
> #5  0x0000000000000000 in  ()

> (gdb) info locals 
> enumerator = 0x1376c40
> sock = 0x0
> priv = 0x148a000
> addr = <optimized out>
> sockaddr = 0x0
> conn_error = 0x0
> (gdb) info registers 
> rax            0x0	0

Related assembly code:
>    0x00007fa38024bc1f <+671>:	lea    0x7239(%rip),%rsi        # 0x7fa380252e5f
>    0x00007fa38024bc26 <+678>:	mov    %r14,%rdi
> => 0x00007fa38024bc29 <+681>:	mov    0x8(%rax),%rdx
>    0x00007fa38024bc2d <+685>:	xor    %eax,%eax
>    0x00007fa38024bc2f <+687>:	callq  0x7fa380245690 <vnc_connection_set_error>

The third argument of vnc_connection_set_error() which gets prepared in RDX is
conn_error. You can see that conn_error is NULL and is initialized as NULL.
So why is this dereferencing conn_error->message then?

Kernel message:
> gvncviewer[11701]: segfault at 8 ip 00007fa38024bc29 sp 00007fa36b7fee20 error 4 in libgvnc-1.0.so.0.0.1[7fa380235000+24000]

8 Bytes is exactly the offset of GError::message.

Related code from src/vncconnection.c vnc_connection_open_host_internal():
> 5380     GError *conn_error = NULL;
...
> 5403     if (!sock) {
> 5404         vnc_connection_set_error(conn, "Unable to connect: %s",
> 5405                                  conn_error->message);
> 5406     }

Do you need anything else from me?
Should I upload the coredump to a SUSE server via SSH?

Can you please fix this NULL pointer dereference? TIA


You are receiving this mail because: