Public bug reported:

On an arm64 system (Cortex-A57 based AMD Overdrive), dumping a lot of
data to a gnome-terminal window crashes the gnome-terminal-server
process.

For instance, doing something like

$ hexdump -C /dev/urandom

will crash within a matter of seconds with the following backtrace

Vte:ERROR:/build/vte2.91-uFdgfJ/vte2.91-0.44.2/./src/vtestream-
file.h:790:unsigned int _vte_boa_uncompress(char*, unsigned int, const
char*, unsigned int): assertion failed (z_ret == Z_OK): (4294967293 ==
0)

Thread 1 "gnome-terminal-" received signal SIGABRT, Aborted.
0x0000ffffb724cb74 in raise () from /lib/aarch64-linux-gnu/libc.so.6
(gdb) bt
#0  0x0000ffffb724cb74 in raise () from /lib/aarch64-linux-gnu/libc.so.6
#1  0x0000ffffb724df5c in abort () from /lib/aarch64-linux-gnu/libc.so.6
#2  0x0000ffffb7419704 in g_assertion_message 
(domain=domain@entry=0xffffb7fa6d40 "Vte", file=file@entry=0xffffb7faefc8 
"/build/vte2.91-uFdgfJ/vte2.91-0.44.2/./src/vtestream-file.h", 
line=line@entry=790, 
    func=func@entry=0xffffb7faee48 <_vte_boa_uncompress::__PRETTY_FUNCTION__> 
"unsigned int _vte_boa_uncompress(char*, unsigned int, const char*, unsigned 
int)", 
    message=message@entry=0x976a40 "assertion failed (z_ret == Z_OK): 
(4294967293 == 0)") at ../../../../glib/gtestutils.c:2433
#3  0x0000ffffb7419ad4 in g_assertion_message_cmpnum (domain=0xffffb7fa6d40 
"Vte", file=0xffffb7faefc8 
"/build/vte2.91-uFdgfJ/vte2.91-0.44.2/./src/vtestream-file.h", line=790, 
    func=0xffffb7faee48 <_vte_boa_uncompress::__PRETTY_FUNCTION__> "unsigned 
int _vte_boa_uncompress(char*, unsigned int, const char*, unsigned int)", 
expr=<optimized out>, arg1=<optimized out>, 
    cmp=0xffffb7faa220 "==", arg2=<optimized out>, numtype=<optimized out>) at 
../../../../glib/gtestutils.c:2489
#4  0x0000ffffb7fa3cdc in _vte_boa_uncompress (dstlen=65512, srclen=7197, 
src=0xfffffffeeb78 "", dst=<optimized out>) at ././src/vtestream-file.h:790
#5  _vte_boa_read_with_overwrite_counter (boa=0x510c20, offset=offset@entry=0, 
data=<optimized out>, overwrite_counter=overwrite_counter@entry=0xffffffffec74) 
at ././src/vtestream-file.h:911
#6  0x0000ffffb7fa4094 in _vte_boa_read (data=<optimized out>, offset=0, 
boa=<optimized out>) at ././src/vtestream-file.h:922
#7  _vte_file_stream_read (astream=0x54a8a0, offset=24, data=0xffffffffecb0 
"\001", len=24) at ././src/vtestream-file.h:1138
#8  0x0000ffffb7f7d93c in _vte_ring_read_row_record (ring=0x7e47b8, 
position=<optimized out>, record=0xffffffffecd0) at ././src/ring.cc:124
#9  _vte_ring_discard_one_row (ring=0x7e47b8) at ././src/ring.cc:417
#10 _vte_ring_maybe_discard_one_row (ring=0x7e47b8) at ././src/ring.cc:439
#11 _vte_ring_insert (ring=ring@entry=0x7e47b8, position=position@entry=10000) 
at ././src/ring.cc:551
#12 0x0000ffffb7f8012c in VteTerminalPrivate::ring_insert 
(this=this@entry=0x7e46e0, position=10000, fill=fill@entry=false) at 
././src/vte.cc:247
#13 0x0000ffffb7f82204 in VteTerminalPrivate::ring_append (fill=false, 
this=0x7e46e0) at ././src/vte.cc:257
#14 VteTerminalPrivate::insert_rows (cnt=1, this=<optimized out>) at 
././src/vte.cc:2419
#15 VteTerminalPrivate::update_insert_delta (this=0x7e46e0) at 
././src/vte.cc:2465
#16 0x0000ffffb7f8f324 in VteTerminalPrivate::process_incoming 
(this=this@entry=0x7e46e0) at ././src/vte.cc:3808
#17 0x0000ffffb7f8ffe0 in VteTerminalPrivate::time_process_incoming 
(this=this@entry=0x7e46e0) at ././src/vte.cc:10652
#18 0x0000ffffb7f900c0 in VteTerminalPrivate::process 
(this=this@entry=0x7e46e0, emit_adj_changed=emit_adj_changed@entry=true) at 
././src/vte.cc:10676
#19 0x0000ffffb7f903c4 in update_repeat_timeout (data=<error reading variable: 
value has been optimized out>) at ././src/vte.cc:10819
#20 0x0000ffffb73f2634 in g_timeout_dispatch (source=0x9c6db0, 
callback=<optimized out>, user_data=<optimized out>) at 
../../../../glib/gmain.c:4674
#21 0x0000ffffb73f1a50 in g_main_dispatch (context=0x4ae300) at 
../../../../glib/gmain.c:3203
#22 g_main_context_dispatch (context=context@entry=0x4ae300) at 
../../../../glib/gmain.c:3856
#23 0x0000ffffb73f1df0 in g_main_context_iterate 
(context=context@entry=0x4ae300, block=block@entry=1, 
dispatch=dispatch@entry=1, self=<optimized out>) at 
../../../../glib/gmain.c:3929
#24 0x0000ffffb73f1eb4 in g_main_context_iteration 
(context=context@entry=0x4ae300, may_block=may_block@entry=1) at 
../../../../glib/gmain.c:3990
#25 0x0000ffffb75b9a00 in g_application_run (application=0x6d1130, argc=0, 
argv=0x0) at ../../../../gio/gapplication.c:2381
#26 0x000000000041506c in ?? ()

The crash is caused by a failed assertion, i.e., that uncompress()
returns Z_OK. I have managed to debug it a bit, and it appears that
uncompress returns Z_DATA_ERROR because the compressed input is
corrupted, and interestingly, consists of all zeroes.

Note that this is an arm64 system, which has a weakly ordered memory
model, so this could be a synchronization issue.

The exact same bug has been reported here, running on an arm64 based
Chromebook.

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=862591

The reason I am reporting this against glib2.0 and not vte2.91 is that
the issue only occurs on zesty (not on yakkety), and the version of vte
between the two is identical.

** Affects: glib2.0 (Ubuntu)
     Importance: Undecided
         Status: New


** Tags: arm64

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/1705947

Title:
  crash in libvte when dealing with large amounts of data

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu/+source/glib2.0/+bug/1705947/+subscriptions

-- 
ubuntu-bugs mailing list
ubuntu-bugs@lists.ubuntu.com
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to