Crash when using dict quotas with sqlite database

Marcel Menzel
Sun, 03 Feb 2019 14:20:50 -0000

Hello Aki,

Arch Linux doesn't have install-able debug symbols for Dovecot. That's
why I just compiled the package for myself with enabled debug symbols
(by editing the makepkg.conf).

I've attached the output from gdb's bt full.

- Marcel

Am 03.02.2019 um 14:45 schrieb Aki Tuomi:
> You need to install debug symbols. Not sure how this is done in arch
> linux though.
>
> Aki
>> On 03 February 2019 at 15:02 Marcel Menzel < mail at mcl.gg
>> <mailto:mail at mcl.gg>> wrote:
>>
>>
>> Hello John,
>>
>> I tried (until now) to get a valuable backtrace, but it seems that GDB
>> can't resolve all symbols.
>> This is what systemd-coredump is giving me:
>>
>> Stack trace of thread 22359:
>> #0? 0x0000638167eaf062 event_unref (libdovecot.so.0)
>> #1? 0x000004a58a212151 n/a (dict)
>> #2? 0x000004a58a211333 n/a (dict)
>> #3? 0x000004a58a20514d n/a (dict)
>> #4? 0x0000638167e556f2 dict_transaction_begin (libdovecot.so.0)
>> #5? 0x000004a58a203b06 n/a (dict)
>> #6? 0x000004a58a2045ff dict_command_input (dict)
>> #7? 0x000004a58a202a31 n/a (dict)
>> #8? 0x000004a58a202b35 n/a (dict)
>> #9? 0x0000638167eaacfd io_loop_call_io (libdovecot.so.0)
>> #10 0x0000638167eac635 io_loop_handler_run_internal (libdovecot.so.0)
>> #11 0x0000638167eaadc7 io_loop_handler_run (libdovecot.so.0)
>> #12 0x0000638167eaaf68 io_loop_run (libdovecot.so.0)
>> #13 0x0000638167e1b36a master_service_run (libdovecot.so.0)
>> #14 0x000004a58a202300 main (dict)
>> #15 0x0000638167a17223 __libc_start_main (libc.so.6)
>> #16 0x000004a58a2023fe _start (dict)
>>
>> GDB's "bt full" won't give anything more here, I
might compile Dovecot
>> with debug symbols enabled as soon as I have a little more time:
>>
>> (gdb) bt full
>> #0? 0x0000638167eaf062 in event_unref () from
>> /usr/lib/dovecot/libdovecot.so.0
>> No symbol table info available.
>> #1? 0x000004a58a212151 in ?? ()
>> No symbol table info available.
>> #2? 0x000004a58a211333 in ?? ()
>> No symbol table info available.
>> #3? 0x000004a58a20514d in ?? ()
>> No symbol table info available.
>> #4? 0x0000638167e556f2 in dict_transaction_begin () from
>> /usr/lib/dovecot/libdovecot.so.0
>> No symbol table info available.
>> #5? 0x000004a58a203b06 in ?? ()
>> No symbol table info available.
>> #6? 0x000004a58a2045ff in dict_command_input ()
>> No symbol table info available.
>> #7? 0x000004a58a202a31 in ?? ()
>> No symbol table info available.
>> #8? 0x000004a58a202b35 in ?? ()
>> No symbol table info available.
>> #9? 0x0000638167eaacfd in io_loop_call_io () from
>> /usr/lib/dovecot/libdovecot.so.0
>> No symbol table info available.
>> #10 0x0000638167eac635 in io_loop_handler_run_internal () from
>> /usr/lib/dovecot/libdovecot.so.0
>> No symbol table info available.
>> #11 0x0000638167eaadc7 in io_loop_handler_run () from
>> /usr/lib/dovecot/libdovecot.so.0
>> No symbol table info available.
>> #12 0x0000638167eaaf68 in io_loop_run () from
>> /usr/lib/dovecot/libdovecot.so.0
>> No symbol table info available.
>> #13 0x0000638167e1b36a in master_service_run () from
>> /usr/lib/dovecot/libdovecot.so.0
>> No symbol table info available.
>> #14 0x000004a58a202300 in main ()
>> No symbol table info available.
>>
>> - Marcel
>>
>> Am 03.02.2019 um 09:08 schrieb John Fawcett:
>>> On 01/02/2019 20:40, Marcel Menzel wrote:
>>>> Hello,
>> >>
>> >> After I configured a SQLite backed dict quota backend, the
dict
>> process
>> >> crashes every time a quota operation is happening.
>> >>
>> >> SQLite: 3.26.0
>> >>
>> >> Dovecot: 2.3.4 (0ecbaf23d)
>> >>
>> >> Linux: 4.20.4.a-1-hardened #1 SMP PREEMPT Fri Jan 25 01:24:51
CET
>> 2019
>> >> x86_64 GNU/Linux (Arch Linux)
>> >>
>> >> Filesystem: BTRFS
>> >>
>> >>
>> >> I can't get any debug output from Dovecot, even after
setting
>> log_debug
>> >> = cat:* event:* source:* field:*=*
>> >>
>> >> dovecot[6457]: dict(6687): Debug: sqlite: Finished query
'BEGIN
>> >> TRANSACTION' in 0 msecs
>> >> dovecot[6457]: dict(6687): Fatal: master: service(dict): child
6687
>> >> killed with signal 11 (core dumped)
>> >>
>> >>
>> >> I've attached the output of dovecot -n and the coredump
file from
>> >> systemd-coredump.
>> >>
>> >>
>> >> Kind regards,
>> >>
>> >> Marcel Menzel
>> >>
>>> Any chance of posting a backtrace?
>>> John
>
> ---
> Aki Tuomi
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<https://dovecot.org/pipermail/dovecot/attachments/20190203/3197711c/attachment-0001.html>
-------------- next part --------------
#0  event_unref (_event=_event at entry=0x781e3b828918) at lib-event.c:217
        event = 0x1400
        __func__ = "event_unref"
#1  0x000000ccbcdb0151 in driver_sqlite_exec (_db=0xccf6c3d438,
query=0xccbcdb2fcd "BEGIN TRANSACTION") at driver-sqlite.c:186
        db = 0xccf6c3d438
        result = {v = {free = 0x0, next_row = 0x0, get_fields_count = 0x0,
get_field_name = 0x0, find_field = 0x0, get_field_value = 0x0,
get_field_value_binary = 0x0, find_field_value = 0x0, get_values = 0x0,
get_error = 0x0,
            more = 0x0}, refcount = 0, db = 0xccf6c3d438, fields = 0x0, map_size
= 0, map = 0x0, fetch_dest = 0x0, event = 0xccf6c3e000, fetch_dest_size = 0,
error_type = SQL_RESULT_ERROR_TYPE_UNKNOWN, failed = false,
          failed_try_retry = false, callback = false}
        event = 0x1400
#2  0x000000ccbcdaf333 in driver_sqlite_transaction_begin (_db=0xccf6c3d438) at
driver-sqlite.c:373
        ctx = 0xccf6c3db80
        db = 0xccf6c3d438
#3  0x000000ccbcda314d in sql_dict_transaction_init (_dict=0xccf6c3bf08) at
dict-sql.c:913
        dict = 0xccf6c3bf08
        ctx = 0xccf6c3dae0
#4  0x0000604dd068f6f2 in dict_transaction_begin (dict=<optimized out>) at
dict.c:234
        ctx = <optimized out>
#5  0x000000ccbcda1b06 in cmd_begin (cmd=0xccf6c3d9e0, line=<optimized
out>) at dict-commands.c:371
        trans = 0xccf6c3da70
        id = 1
#6  0x000000ccbcda25ff in dict_command_input (conn=conn at entry=0xccf6c37a10,
line=line at entry=0xccf6c39e79 "B1") at dict-commands.c:618
        cmd_func = <optimized out>
        cmd = 0xccf6c3d9e0
        ret = <optimized out>
#7  0x000000ccbcda0a31 in dict_connection_input_more (conn=0xccf6c37a10) at
dict-connection.c:120
        _data_stack_cur_id = 3
        line = 0xccf6c39e79 "B1"
        ret = <optimized out>
#8  0x000000ccbcda0b35 in dict_connection_input (conn=0xccf6c37a10) at
dict-connection.c:169
        line = <optimized out>
        line = <optimized out>
#9  dict_connection_input (conn=0xccf6c37a10) at dict-connection.c:134
        line = <optimized out>
#10 0x0000604dd06e4cfd in io_loop_call_io (io=0xccf6c37e30) at ioloop.c:698
        ioloop = 0xccf6c28d70
        t_id = 2
        __func__ = "io_loop_call_io"
#11 0x0000604dd06e6635 in io_loop_handler_run_internal (ioloop=ioloop at
entry=0xccf6c28d70) at ioloop-epoll.c:221
        ctx = 0xccf6c2a910
        events = <optimized out>
        event = 0xccf6c2a980
        list = 0xccf6c37e90
        io = <optimized out>
        tv = {tv_sec = 2147483, tv_usec = 0}
        events_count = <optimized out>
        msecs = <optimized out>
        ret = <optimized out>
        i = 0
        j = <optimized out>
        call = <optimized out>
        __func__ = "io_loop_handler_run_internal"
#12 0x0000604dd06e4dc7 in io_loop_handler_run (ioloop=0xccf6c28d70) at
ioloop.c:750
        __func__ = "io_loop_handler_run"
#13 0x0000604dd06e4f68 in io_loop_run (ioloop=0xccf6c28d70) at ioloop.c:723
        __func__ = "io_loop_run"
#14 0x0000604dd065536a in master_service_run (service=0xccf6c28c00,
callback=callback at entry=0xccbcda2970 <client_connected>) at
master-service.c:781
No locals.
#15 0x000000ccbcda0300 in main (argc=<optimized out>, argv=<optimized
out>) at main.c:153
        set_roots = {0xccbcdb9cc0 <dict_setting_parser_info>, 0x0}
        error = 0x781e3b828cf6 ""
quit