bookworm icon indicating copy to clipboard operation
bookworm copied to clipboard

Crashes with glibc heap consistency checking turned on

Open hosiet opened this issue 2 years ago • 0 comments

Forwarding downstream Debian bug report: https://bugs.debian.org/997670

This appears with bookworm git snapshot 20210715, which holds the same source code as current git HEAD except for translations.


When I turn on glibc heap consistency checking, bookworm crashes at startup. From the gdb trace it looks like it is trying to g_strdup a pointer that has not been initialised. Also valgrind indicates an invalid memory read, which is probably cause of the crash.

https://www.gnu.org/software/libc/manual/html_node/Heap-Consistency-Checking.html https://udrepper.livejournal.com/11429.html

$ export MALLOC_CHECK_=2
$ export MALLOC_PERTURB_=$((0xF0))

$ gdb -batch -n -ex 'set pagination off' -ex run -ex bt -ex 'bt full' --args com.github.babluboy.bookworm
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
__strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
120	../sysdeps/x86_64/multiarch/../strlen.S: No such file or directory.
#0  __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
#1  0x00007ffff718eab4 in g_strdup (str=0x7f0f0f0f0f0f0d1 <error: Cannot access memory at address 0x7f0f0f0f0f0f0d1>) at ../../../glib/gstrfuncs.c:363
#2  0x00007ffff7389a67 in add_packed_option (entry=0x7fffffffd290, application=0x55555580c120 [BookwormAppBookworm]) at ../../../gio/gapplication.c:648
#3  g_application_add_main_option_entries (application=application@entry=0x55555580c120 [BookwormAppBookworm], entries=<optimized out>) at ../../../gio/gapplication.c:740
#4  0x0000555555567a8d in bookworm_app_bookworm_constructor (type=<optimized out>, n_construct_properties=<optimized out>, construct_properties=0x5555557b1bf0) at ../src/bookworm.vala:116
#5  0x00007ffff7268ab8 in g_object_new_with_custom_constructor (n_params=2, params=0x7fffffffd470, class=0x555555801200) at ../../../gobject/gobject.c:1863
#6  g_object_new_internal (class=class@entry=0x555555801200, params=params@entry=0x7fffffffd470, n_params=n_params@entry=2) at ../../../gobject/gobject.c:1943
#7  0x00007ffff726a508 in g_object_new_valist (object_type=0x5555557fb220 [BookwormAppBookworm/GraniteApplication/GtkApplication/GApplication], first_property_name=first_property_name@entry=0x5555555ad74b "application-id", var_args=var_args@entry=0x7fffffffd740) at ../../../gobject/gobject.c:2288
#8  0x00007ffff726aa39 in g_object_new (object_type=<optimized out>, first_property_name=first_property_name@entry=0x5555555ad74b "application-id") at ../../../gobject/gobject.c:1788
#9  0x00005555555676c5 in bookworm_app_bookworm_construct (object_type=<optimized out>) at ../src/bookworm.vala:120
#10 bookworm_app_bookworm_new () at ../src/bookworm.vala:119
#11 bookworm_app_bookworm_getAppInstance () at ../src/bookworm.vala:136
#12 0x00005555555633fb in _vala_main (args_length1=<optimized out>, args=<optimized out>) at ../src/main.vala:23
#13 main (argc=<optimized out>, argv=<optimized out>) at ../src/main.vala:20
#0  __strlen_sse2 () at ../sysdeps/x86_64/multiarch/../strlen.S:120
#1  0x00007ffff718eab4 in g_strdup (str=0x7f0f0f0f0f0f0d1 <error: Cannot access memory at address 0x7f0f0f0f0f0f0d1>) at ../../../glib/gstrfuncs.c:363
        new_str = <optimized out>
        length = <optimized out>
#2  0x00007ffff7389a67 in add_packed_option (entry=0x7fffffffd290, application=0x55555580c120 [BookwormAppBookworm]) at ../../../gio/gapplication.c:648
        __func__ = "add_packed_option"
        my_entries = {{long_name = 0x7f0f0f0f0f0f0d1 <error: Cannot access memory at address 0x7f0f0f0f0f0f0d1>, short_name = -127 '\201', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x5555557b2e30, description = 0x0, arg_description = 0x1 <error: Cannot access memory at address 0x1>}, {long_name = 0x0, short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x0, description = 0x0, arg_description = 0x0}}
        i = 0
        __func__ = "g_application_add_main_option_entries"
#3  g_application_add_main_option_entries (application=application@entry=0x55555580c120 [BookwormAppBookworm], entries=<optimized out>) at ../../../gio/gapplication.c:740
        my_entries = {{long_name = 0x7f0f0f0f0f0f0d1 <error: Cannot access memory at address 0x7f0f0f0f0f0f0d1>, short_name = -127 '\201', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x5555557b2e30, description = 0x0, arg_description = 0x1 <error: Cannot access memory at address 0x1>}, {long_name = 0x0, short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x0, description = 0x0, arg_description = 0x0}}
        i = 0
        __func__ = "g_application_add_main_option_entries"
#4  0x0000555555567a8d in bookworm_app_bookworm_constructor (type=<optimized out>, n_construct_properties=<optimized out>, construct_properties=0x5555557b1bf0) at ../src/bookworm.vala:116
        obj = 0x55555580c120 [BookwormAppBookworm]
        parent_class = <optimized out>
        self = 0x55555580c120 [BookwormAppBookworm]
        _tmp0_ = <optimized out>
        _tmp1_ = <optimized out>
        _tmp2_ = <optimized out>
        _tmp3_ = <optimized out>
        _tmp4_ = <optimized out>
        _tmp5_ = <optimized out>
        _tmp6_ = <optimized out>
        _tmp7_ = {long_name = 0x5555555ad1c6 "version", short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x5555557933d4 <bookworm_app_bookworm_command_line_option_version>, description = <optimized out>, arg_description = <optimized out>}
        _tmp8_ = <optimized out>
        _tmp9_ = {long_name = 0x5555555ad1d0 "debug", short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x5555557933d0 <bookworm_app_bookworm_command_line_option_debug>, description = <optimized out>, arg_description = <optimized out>}
        _tmp10_ = <optimized out>
        _tmp11_ = {long_name = 0x5555555ad1d8 "info", short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x5555557933cc <bookworm_app_bookworm_command_line_option_info>, description = <optimized out>, arg_description = <optimized out>}
        _tmp12_ = 0x55555580ee70
        _tmp13_ = {long_name = 0x5555555ad243 "discover", short_name = 0 '\000', flags = 0, arg = G_OPTION_ARG_NONE, arg_data = 0x5555557933c8 <bookworm_app_bookworm_command_line_option_discover>, description = <optimized out>, arg_description = <optimized out>}
        _tmp14_ = <optimized out>
#5  0x00007ffff7268ab8 in g_object_new_with_custom_constructor (n_params=2, params=0x7fffffffd470, class=0x555555801200) at ../../../gobject/gobject.c:1863
        cparams = 0x5555557b1bf0
        cvalues = 0x55555580b2b0
        node = <optimized out>
        i = 1
        nqueue = 0x0
        newly_constructed = <optimized out>
        object = <optimized out>
        n_cparams = 1
        cvals_used = <optimized out>
        nqueue = 0x0
        object = <optimized out>
        __func__ = "g_object_new_internal"
#6  g_object_new_internal (class=class@entry=0x555555801200, params=params@entry=0x7fffffffd470, n_params=n_params@entry=2) at ../../../gobject/gobject.c:1943
        nqueue = 0x0
        object = <optimized out>
        __func__ = "g_object_new_internal"
#7  0x00007ffff726a508 in g_object_new_valist (object_type=0x5555557fb220 [BookwormAppBookworm/GraniteApplication/GtkApplication/GApplication], first_property_name=first_property_name@entry=0x5555555ad74b "application-id", var_args=var_args@entry=0x7fffffffd740) at ../../../gobject/gobject.c:2288
        params = 0x7fffffffd470
        values = 0x7fffffffd570
        params_stack = {{pspec = 0x5555557fe020 [GParamString], value = 0x7fffffffd570}, {pspec = 0x5555557fe860 [GParamFlags], value = 0x7fffffffd588}, {pspec = 0x0, value = 0x0}, {pspec = 0x6e0000005f, value = 0xc81d1bae717eba00}, {pspec = 0x1, value = 0x400}, {pspec = 0x7ffff3483ba0, value = 0x5555557fb800}, {pspec = 0x555555794368, value = 0x400}, {pspec = 0x401, value = 0x7ffff334eb95 <_int_memalign+341>}, {pspec = 0x3000000003, value = 0x7fffffffd560}, {pspec = 0x400, value = 0x3f0}, {pspec = 0x555555794368, value = 0x400}, {pspec = 0x30, value = 0x7ffff334ec7e <memalign_check+94>}, {pspec = 0x18, value = 0x18}, {pspec = 0x3, value = 0x1}, {pspec = 0x8, value = 0x7ffff334e6e6 <_int_malloc+3238>}, {pspec = 0x5555557fb800 [GtkActionMuxer], value = 0x38}}
        values_stack = {{g_type = 0x40 [gchararray], data = {{v_int = 1434497664, v_uint = 1434497664, v_long = 93824995078784, v_ulong = 93824995078784, v_int64 = 93824995078784, v_uint64 = 93824995078784, v_float = 1.76880175e+13, v_double = 4.6355706789651196e-310, v_pointer = 0x55555580b280}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}, {g_type = 0x5555557fda00 [GApplicationFlags], data = {{v_int = 8, v_uint = 8, v_long = 8, v_ulong = 8, v_int64 = 8, v_uint64 = 8, v_float = 1.12103877e-44, v_double = 3.9525251667299724e-323, v_pointer = 0x8}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}, {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 4, v_uint = 4, v_long = 4, v_ulong = 4, v_int64 = 4, v_uint64 = 4, v_float = 5.60519386e-45, v_double = 1.9762625833649862e-323, v_pointer = 0x4}}}, {g_type = 0x7 [void], data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 81, v_uint = 81, v_long = 81, v_ulong = 81, v_int64 = 81, v_uint64 = 81, v_float = 1.13505176e-43, v_double = 4.001931731314097e-322, v_pointer = 0x51}}}, {g_type = 0x6 [void], data = {{v_int = -214636670, v_uint = 4080330626, v_long = 140737273718658, v_ulong = 140737273718658, v_int64 = 140737273718658, v_uint64 = 140737273718658, v_float = -1.43327175e+31, v_double = 6.9533452033745058e-310, v_pointer = 0x7ffff334e782 <_int_malloc+3394>}, {v_int = 128, v_uint = 128, v_long = 128, v_ulong = 128, v_int64 = 128, v_uint64 = 128, v_float = 1.79366203e-43, v_double = 6.3240402667679558e-322, v_pointer = 0x80}}}, {g_type = 0x1, data = {{v_int = 255, v_uint = 255, v_long = 255, v_ulong = 255, v_int64 = 255, v_uint64 = 255, v_float = 3.57331108e-43, v_double = 1.2598673968951787e-321, v_pointer = 0xff}, {v_int = 7, v_uint = 7, v_long = 7, v_ulong = 7, v_int64 = 7, v_uint64 = 7, v_float = 9.80908925e-45, v_double = 3.4584595208887258e-323, v_pointer = 0x7}}}, {g_type = 0x0, data = {{v_int = -214637328, v_uint = 4080329968, v_long = 140737273718000, v_ulong = 140737273718000, v_int64 = 140737273718000, v_uint64 = 140737273718000, v_float = -1.4331922e+31, v_double = 6.9533452033419963e-310, v_pointer = 0x7ffff334e4f0 <_int_malloc+2736>}, {v_int = 99, v_uint = 99, v_long = 99, v_ulong = 99, v_int64 = 99, v_uint64 = 99, v_float = 1.38728548e-43, v_double = 4.8912498938283408e-322, v_pointer = 0x63}}}, {g_type = 0x38 [gfloat], data = {{v_int = 56, v_uint = 56, v_long = 56, v_ulong = 56, v_int64 = 56, v_uint64 = 56, v_float = 7.8472714e-44, v_double = 2.7667676167109806e-322, v_pointer = 0x38}, {v_int = -149369443, v_uint = 4145597853, v_long = 140737338985885, v_ulong = 140737338985885, v_int64 = 140737338985885, v_uint64 = 140737338985885, v_float = -3.09921662e+33, v_double = 6.9533484280039718e-310, v_pointer = 0x7ffff718cd9d <g_slice_alloc+29>}}}, {g_type = 0x0, data = {{v_int = -214638376, v_uint = 4080328920, v_long = 140737273716952, v_ulong = 140737273716952, v_int64 = 140737273716952, v_uint64 = 140737273716952, v_float = -1.4330655e+31, v_double = 6.9533452032902182e-310, v_pointer = 0x7ffff334e0d8 <_int_malloc+1688>}, {v_int = 9, v_uint = 9, v_long = 9, v_ulong = 9, v_int64 = 9, v_uint64 = 9, v_float = 1.26116862e-44, v_double = 4.4465908125712189e-323, v_pointer = 0x9}}}, {g_type = <error reading variable: Cannot access memory at address 0xe8001056b93d8d70>, data = {{v_int = 176, v_uint = 176, v_long = 176, v_ulong = 176, v_int64 = 176, v_uint64 = 176, v_float = 2.4662853e-43, v_double = 8.6955553668059392e-322, v_pointer = 0xb0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}, {g_type = 0x4 [void], data = {{v_int = 7, v_uint = 7, v_long = 7, v_ulong = 7, v_int64 = 7, v_uint64 = 7, v_float = 9.80908925e-45, v_double = 3.4584595208887258e-323, v_pointer = 0x7}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}, {g_type = 0x51 [GObject], data = {{v_int = 6, v_uint = 6, v_long = 6, v_ulong = 6, v_int64 = 6, v_uint64 = 6, v_float = 8.40779079e-45, v_double = 2.9643938750474793e-323, v_pointer = 0x6}, {v_int = 20, v_uint = 20, v_long = 20, v_ulong = 20, v_int64 = 20, v_uint64 = 20, v_float = 2.80259693e-44, v_double = 9.8813129168249309e-323, v_pointer = 0x14}}}, {g_type = <error reading variable: Cannot access memory at address 0x28>, data = {{v_int = 1, v_uint = 1, v_long = 1, v_ulong = 1, v_int64 = 1, v_uint64 = 1, v_float = 1.40129846e-45, v_double = 4.9406564584124654e-324, v_pointer = 0x1}, {v_int = 6, v_uint = 6, v_long = 210453397510, v_ulong = 210453397510, v_int64 = 210453397510, v_uint64 = 210453397510, v_float = 8.40779079e-45, v_double = 1.0397779376026274e-312, v_pointer = 0x3100000006}}}, {g_type = 0x0, data = {{v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}, {g_type = <error reading variable: Cannot access memory at address 0x6e00000080>, data = {{v_int = 124, v_uint = 124, v_long = 511101108348, v_ulong = 511101108348, v_int64 = 511101108348, v_uint64 = 511101108348, v_float = 1.7376101e-43, v_double = 2.5251749918613155e-312, v_pointer = 0x770000007c}, {v_int = 0, v_uint = 0, v_long = 0, v_ulong = 0, v_int64 = 0, v_uint64 = 0, v_float = 0, v_double = 0, v_pointer = 0x0}}}, {g_type = 0x50 [GObject], data = {{v_int = 80, v_uint = 80, v_long = 80, v_ulong = 80, v_int64 = 80, v_uint64 = 80, v_float = 1.12103877e-43, v_double = 3.9525251667299724e-322, v_pointer = 0x50}, {v_int = 81, v_uint = 81, v_long = 81, v_ulong = 81, v_int64 = 81, v_uint64 = 81, v_float = 1.13505176e-43, v_double = 4.001931731314097e-322, v_pointer = 0x51}}}}
        name = <optimized out>
        n_params = <optimized out>
        n_params_alloc = 16
        class = <optimized out>
        unref_class = <optimized out>
        object = <optimized out>
        __func__ = "g_object_new_valist"
#8  0x00007ffff726aa39 in g_object_new (object_type=<optimized out>, first_property_name=first_property_name@entry=0x5555555ad74b "application-id") at ../../../gobject/gobject.c:1788
        object = <optimized out>
        var_args = {{gp_offset = 48, fp_offset = 48, overflow_arg_area = 0x7fffffffd820, reg_save_area = 0x7fffffffd760}}
#9  0x00005555555676c5 in bookworm_app_bookworm_construct (object_type=<optimized out>) at ../src/bookworm.vala:120
        self = 0x0
        _tmp1_ = <optimized out>
        _tmp3_ = <optimized out>
        _tmp5_ = <optimized out>
        _tmp0_ = <optimized out>
        _tmp2_ = <optimized out>
        _tmp4_ = <optimized out>
        _tmp6_ = <optimized out>
        _tmp1_ = <optimized out>
        _tmp0_ = 0x0
        _tmp2_ = <optimized out>
#10 bookworm_app_bookworm_new () at ../src/bookworm.vala:119
        _tmp1_ = <optimized out>
        _tmp0_ = 0x0
        _tmp2_ = <optimized out>
#11 bookworm_app_bookworm_getAppInstance () at ../src/bookworm.vala:136
        _tmp1_ = <optimized out>
        _tmp0_ = 0x0
        _tmp2_ = <optimized out>
#12 0x00005555555633fb in _vala_main (args_length1=<optimized out>, args=<optimized out>) at ../src/main.vala:23
        _tmp1_ = 0
        _tmp3_ = 0
        _tmp0_ = <optimized out>
        _tmp2_ = 0
        result = 0
#13 main (argc=<optimized out>, argv=<optimized out>) at ../src/main.vala:20

$ valgrind com.github.babluboy.bookworm
==761696== Memcheck, a memory error detector
==761696== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
==761696== Using Valgrind-3.17.0 and LibVEX; rerun with -h for copyright info
==761696== Command: com.github.babluboy.bookworm
==761696== 
==761696== Invalid read of size 8
==761696==    at 0x545F9D4: g_application_add_main_option_entries (gapplication.c:730)
==761696==    by 0x11BA8C: bookworm_app_bookworm_constructor (bookworm.vala:116)
==761696==    by 0x557DAB7: g_object_new_with_custom_constructor (gobject.c:1863)
==761696==    by 0x557DAB7: g_object_new_internal (gobject.c:1943)
==761696==    by 0x557F507: g_object_new_valist (gobject.c:2288)
==761696==    by 0x557FA38: g_object_new (gobject.c:1788)
==761696==    by 0x11B6C4: bookworm_app_bookworm_construct (bookworm.vala:120)
==761696==    by 0x11B6C4: bookworm_app_bookworm_new (bookworm.vala:119)
==761696==    by 0x11B6C4: bookworm_app_bookworm_getAppInstance (bookworm.vala:136)
==761696==    by 0x1173FA: _vala_main (main.vala:23)
==761696==    by 0x1173FA: main (main.vala:20)
==761696==  Address 0xfb8a890 is 0 bytes after a block of size 192 alloc'd
==761696==    at 0x483E581: calloc (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==761696==    by 0x5617C20: g_malloc0 (gmem.c:136)
==761696==    by 0x11B937: bookworm_app_bookworm_constructor (bookworm.vala:111)
==761696==    by 0x557DAB7: g_object_new_with_custom_constructor (gobject.c:1863)
==761696==    by 0x557DAB7: g_object_new_internal (gobject.c:1943)
==761696==    by 0x557F507: g_object_new_valist (gobject.c:2288)
==761696==    by 0x557FA38: g_object_new (gobject.c:1788)
==761696==    by 0x11B6C4: bookworm_app_bookworm_construct (bookworm.vala:120)
==761696==    by 0x11B6C4: bookworm_app_bookworm_new (bookworm.vala:119)
==761696==    by 0x11B6C4: bookworm_app_bookworm_getAppInstance (bookworm.vala:136)
==761696==    by 0x1173FA: _vala_main (main.vala:23)
==761696==    by 0x1173FA: main (main.vala:20)
==761696== 
...

-- System Information:
Debian Release: bookworm/sid
  APT prefers testing-debug
  APT policy: (900, 'testing-debug'), (900, 'testing'), (860, 'testing-proposed-updates-debug'), (860, 'testing-proposed-updates'), (800, 'unstable-debug'), (800, 'unstable'), (790, 'buildd-unstable'), (700, 'experimental-debug'), (700, 'experimental'), (690, 'buildd-experimental')
Architecture: amd64 (x86_64)

Kernel: Linux 5.14.0-3-amd64 (SMP w/8 CPU threads)
Kernel taint flags: TAINT_OOT_MODULE, TAINT_UNSIGNED_MODULE
Locale: LANG=en_AU.utf8, LC_CTYPE=en_AU.utf8 (charmap=UTF-8), LANGUAGE=en_AU:en
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)
LSM: AppArmor: enabled

Versions of packages bookworm depends on:
ii  dconf-gsettings-backend [gsettings-backend]  0.40.0-2
ii  html2text                                    1.3.2a-28
ii  libc6                                        2.32-4
ii  libgdk-pixbuf-2.0-0                          2.42.6+dfsg-2
ii  libgee-0.8-2                                 0.20.4-1
ii  libglib2.0-0                                 2.70.0-1+b1
ii  libgranite6                                  6.1.1-1
ii  libgtk-3-0                                   3.24.30-3
ii  libpango-1.0-0                               1.48.10+ds1-1
ii  libpoppler-glib8                             20.09.0-3.1
ii  libsoup2.4-1                                 2.74.0-2
ii  libsqlite3-0                                 3.36.0-2
ii  libwebkit2gtk-4.0-37                         2.34.1-1
ii  libxml2                                      2.9.12+dfsg-5
ii  poppler-utils                                20.09.0-3.1
ii  python3                                      3.9.2-3
ii  unar                                         1.10.1-2+b6
ii  unzip                                        6.0-26

hosiet avatar Oct 24 '21 18:10 hosiet