moonjit / moonjit

Just-In-Time Compiler for the Lua Programming language. Fork of LuaJIT to continue development. This project does not have an active maintainer, see https://twitter.com/siddhesh_p/status/1308594269502885889?s=20 for more detail.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Segmentation fault in `lua_textpart_get_fuzzy_hashes`

Raemi opened this issue · comments

Disclaimer

I apologize in advance for this possibly invalid bug report. The segfault happens in rspamd and I reported the bug there (RSpamd Issue 3426), but didn't get any response yet. And since the bug is machine-dependent and lua is on the stack trace, I'm hopeful that you may be able to help. I will try to get all the information that you need.

Description

Segmentation fault in luaopen_trie or lua_textpart_get_fuzzy_hashes

Steps to reproduce

  1. Install rspamd from https://rspamd.com/apt-stable on Ubuntu 20.04.1
  2. Follow the steps outlined here: RSpamd Issue 3426

Debug Info

Here is the full stack trace of the corefile produced by a crash, but more information may also be found in RSpamd Issue 3426 .

(gdb) bt full
#0  0x00007f5bad47b664 in lua_textpart_get_fuzzy_hashes (L=0x7f5ba8e1c380) at ./src/lua/lua_mimepart.c:1235
        part = 0x7f5ba531c940
        pool = 0x7f5ba5284800
        key = "\357C\256\200̍\303Lo\033\326\030\033\256\207t\f\312\367\216_.T2\366y\271'&\226 \222p\a\205\353\203\367\211\340\327\062*\322\032dA\357I\377ÌT\371gt0\036p.\267\022\t\376"
        digest = " \352\265\302\376\177\000\000\002", '\000' <repeats 15 times>, "\004\037b\255[\177\000\000 ", '\000' <repeats 15 times>, "\340\303\341\250[\177\000\000\200\303\341\250[\177\000"
        hexdigest = "\022Of\255[\177\000\000\n\000\000\000\000\000\000\000\022Of\255[\177\000\000?\000\000\000\000\000\000\000\063\022f\255[\177\000\000\017", '\000' <repeats 15 times>, "-\026b\255[\177\000\000\200\303\341\250[\177\000\000\200\303\341\250[\177\000\000\377\377\377\377\000\000\000\000\207\236`\255[\177\000\000Ɉ`\255[\177\000\000\212\275I\255[\177\000\000\000\000\000\000\000\000\000\000\063\022f\255[\177\000\000?"
        numbuf = "`\000\000\000\000\000\000\000'\030b\255\000\000\000\000\t", '\000' <repeats 15 times>, "\210\035\036\246[\177\000\000\t\000\000\000\000\000\000\000\270Mߧ[\177\000\000\002\000\000\000\000\000\000"
        sgl = <optimized out>
        i = 0
        sd = <optimized out>
        st = {
          opaque = "H\211\275\362g\346\tj;\247ʄ\205\256g\273+\370\224\376r\363n<\361\066\035_:\365O\245т\346\255\177R\016Q\037l>+\214h\005\233k\275A\373\253ك\037y!~\023\031\315\340[", '\000' <repeats 32 times>, "\357C\256\200̍\303Lo\033\326\030\033\256\207t\f\312\367\216_.T2\366y\271'&\226 \222p\a\205\353\203\367\211\340\327\062*\322\032dA\357I\377ÌT\371gt0\036p.\267\022\t\376", '\000' <repeats 192 times>...}
        word = <optimized out>
#1  0x00007f5bad61c875 in lj_BC_FUNCC () from /usr/lib/rspamd/librspamd-server.so
No symbol table info available.
#2  0x00007f5bad60a9ff in lua_pcall () from /usr/lib/rspamd/librspamd-server.so
No symbol table info available.
#3  0x00007f5bad48fdf7 in lua_metric_symbol_callback (task=0x7f5ba52848a0, item=<optimized out>, ud=0x7f5ba63b5ed8)
    at ./src/lua/lua_config.c:1220
        cd = 0x7f5ba63b5ed8
        ptask = 0x7f5ba61e1cb8
        level = 1
        nresults = <optimized out>
        err_idx = 1
        ret = <optimized out>
        L = 0x7f5ba8e1c380
        s = <optimized out>
        __func__ = "lua_metric_symbol_callback"
#4  0x00007f5bad4f84d2 in rspamd_symcache_check_symbol.isra.0.lto_priv.0 (task=task@entry=0x7f5ba52848a0, 
    item=0x7f5ba746ad48, checkpoint=checkpoint@entry=0x7f5ba531c020, cache=<optimized out>, cache=<optimized out>)
    at ./src/libserver/rspamd_symcache.c:1774
        ptask = <optimized out>
        L = <optimized out>
        check = <optimized out>
        dyn_item = <optimized out>
        __func__ = <optimized out>
#5  0x00007f5bad4fa99d in rspamd_symcache_process_symbols (task=0x7f5ba52848a0, cache=0x7f5ba985e180, 
    stage=<optimized out>) at ./src/libserver/rspamd_symcache.c:2281
        item = <optimized out>
--Type <RET> for more, q to quit, c to continue without paging--
        dyn_item = <optimized out>
        checkpoint = 0x7f5ba531c020
        i = 0
        all_done = 1
        saved_priority = 10
        start_events_pending = 0
        __func__ = "rspamd_symcache_process_symbols"
#6  0x00007f5bad3c7917 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:818
        st = <optimized out>
        ret = 1
        all_done = 1
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#7  0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#8  0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#9  0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#10 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#11 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#12 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
--Type <RET> for more, q to quit, c to continue without paging--
        __func__ = "rspamd_task_process"
#13 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#14 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#15 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#16 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#17 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#18 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#19 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#20 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
--Type <RET> for more, q to quit, c to continue without paging--
        __func__ = "rspamd_task_process"
#21 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#22 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#23 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#24 0x00007f5bad3c7c16 in rspamd_task_process (task=0x7f5ba52848a0, stages=262143) at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#25 0x00007f5bad3c7c16 in rspamd_task_process (task=task@entry=0x7f5ba52848a0, stages=stages@entry=262143)
    at ./src/libserver/task.c:864
        st = <optimized out>
        ret = <optimized out>
        all_done = <optimized out>
        stat_error = 0x0
        __func__ = "rspamd_task_process"
#26 0x00005620c11ac246 in rspamd_controller_handle_scan (conn_ent=conn_ent@entry=0x7f5ba7489390, 
    msg=msg@entry=0x7f5ba47febc0) at ./src/controller.c:2120
        session = 0x7f5ba77cb570
        ctx = 0x7f5ba80099b8
        task = 0x7f5ba52848a0
        __func__ = "rspamd_controller_handle_scan"
#27 0x00007f5bad4dce13 in rspamd_http_router_finish_handler (conn=<optimized out>, msg=0x7f5ba47febc0)
    at ./src/libserver/http/http_router.c:334
        entry = 0x7f5ba7489390
        handler = 0x5620c11ac120 <rspamd_controller_handle_scan>
        found = <optimized out>
        err = <optimized out>
        lookup = {len = 8, begin = 0x7f5ba99d57f0 "/checkv2"}
        encoding = <optimized out>
        u = {field_set = 8, port = 0, field_data = {{off = 32603, len = 0}, {off = 8, len = 0}, {off = 0, 
              len = 0}, {off = 0, len = 8}, {off = 0, len = 0}, {off = 0, len = 0}, {off = 0, len = 0}}}
--Type <RET> for more, q to quit, c to continue without paging--c
        i = <optimized out>
        re = <optimized out>
        router = 0x7f5ba539f8c0
        __func__ = "rspamd_http_router_finish_handler"
#28 0x00007f5bad4dff40 in rspamd_http_on_message_complete (parser=<optimized out>) at ./src/libserver/http/http_connection.c:697
        conn = 0x7f5ba99a53c0
        priv = 0x7f5ba98d1d80
        ret = <optimized out>
        mode = <optimized out>
        __func__ = "rspamd_http_on_message_complete"
        _g_boolean_var_ = <optimized out>
#29 0x00007f5bad445d34 in http_parser_execute (len=<optimized out>, data=0x7f5ba5315010 "POST /checkv2 HTTP/1.1\r\nHost: localhost:11334\r\nUser-Agent: curl/7.68.0\r\nAccept: */*\r\nContent-Type: message/rfc822\r\nContent-Length: 41\r\n\r\nContent-Type: text/plainMIME-Version: 1.0", settings=<optimized out>, parser=0x7f5ba98d1db8) at ./contrib/http-parser/http_parser.c:1773
        unhex_val = <optimized out>
        p = <optimized out>
        header_value_mark = <optimized out>
        url_mark = <optimized out>
        header_field_mark = <optimized out>
        c = <optimized out>
        ch = 67 'C'
        body_mark = <optimized out>
        status_mark = <optimized out>
        c = <optimized out>
        ch = <optimized out>
        unhex_val = <optimized out>
        p = <optimized out>
        header_field_mark = <optimized out>
        header_value_mark = <optimized out>
        url_mark = <optimized out>
        body_mark = <optimized out>
        status_mark = <optimized out>
        __PRETTY_FUNCTION__ = <optimized out>
        matcher = <optimized out>
        t = <optimized out>
        to_read = <optimized out>
        t = <optimized out>
        to_read = <optimized out>
#30 http_parser_execute (parser=0x7f5ba98d1db8, settings=<optimized out>, data=0x7f5ba5315010 "POST /checkv2 HTTP/1.1\r\nHost: localhost:11334\r\nUser-Agent: curl/7.68.0\r\nAccept: */*\r\nContent-Type: message/rfc822\r\nContent-Length: 41\r\n\r\nContent-Type: text/plainMIME-Version: 1.0", len=<optimized out>) at ./contrib/http-parser/http_parser.c:572
        c = <optimized out>
        ch = <optimized out>
        unhex_val = <optimized out>
        p = 0x7f5ba5315010 "POST /checkv2 HTTP/1.1\r\nHost: localhost:11334\r\nUser-Agent: curl/7.68.0\r\nAccept: */*\r\nContent-Type: message/rfc822\r\nContent-Length: 41\r\n\r\nContent-Type: text/plainMIME-Version: 1.0"
        __PRETTY_FUNCTION__ = "http_parser_execute"
        matcher = <optimized out>
        t = <optimized out>
        to_read = <optimized out>
        t = <optimized out>
        to_read = <optimized out>
#31 0x00007f5bad4dfbe4 in rspamd_http_event_handler (fd=<optimized out>, what=<optimized out>, ud=0x7f5ba99a53c0) at ./src/libserver/http/http_connection.c:953
        conn = 0x7f5ba99a53c0
        priv = 0x7f5ba98d1d80
        pbuf = 0x7f5ba74891b0
        d = 0x7f5ba5315010 "POST /checkv2 HTTP/1.1\r\nHost: localhost:11334\r\nUser-Agent: curl/7.68.0\r\nAccept: */*\r\nContent-Type: message/rfc822\r\nContent-Length: 41\r\n\r\nContent-Type: text/plainMIME-Version: 1.0"
        r = 178
        err = <optimized out>
        __func__ = "rspamd_http_event_handler"
#32 0x00007f5bacef1646 in ev_invoke_pending (loop=0x7f5ba9847c00) at ./contrib/libev/ev.c:3807
        p = <optimized out>
#33 0x00007f5bacef66ad in ev_run (flags=0, loop=0x7f5ba9847c00) at ./contrib/libev/ev.c:4227
        __PRETTY_FUNCTION__ = <optimized out>
#34 ev_run (loop=0x7f5ba9847c00, flags=flags@entry=0) at ./contrib/libev/ev.c:4058
        __PRETTY_FUNCTION__ = "ev_run"
        waittime = <optimized out>
        sleeptime = <optimized out>
        prev_mn_now = <optimized out>
        to = <optimized out>
        to = <optimized out>
#35 0x00005620c11a8803 in ev_loop (flags=0, loop=<optimized out>) at ./contrib/libev/ev.h:830
No locals.
#36 start_controller_worker (worker=0x7f5ba98798c0) at ./src/controller.c:3667
        ctx = 0x7f5ba80099b8
        mctx = <optimized out>
        iter = {dummy1 = 0x7f5ba9963ea0, dummy2 = 0x7ffec2b5f6c0, dummy3 = 0x7ffec2b5f680, dummy4 = 8, dummy5 = -247561067, dummy6 = 0x7f5b00000003}
        key = 0x7f5bad65ff29
        value = 0x7f5ba99978c0
        i = <optimized out>
        m = <optimized out>
        __func__ = "start_controller_worker"
#37 0x00007f5bad4e80eb in rspamd_fork_worker (rspamd_main=0x7f5ba9862000, cf=0x7f5ba98f1500, index=0, ev_base=<optimized out>, term_handler=<optimized out>) at ./src/libserver/worker_util.c:1059
        wrk = 0x7f5ba98798c0
        rc = <optimized out>
        rlim = {rlim_cur = 104857600, rlim_max = 104857600}
        __func__ = "rspamd_fork_worker"
#38 0x00005620c11a21d9 in rspamd_fork_delayed_cb (loop=<optimized out>, w=<optimized out>, revents=<optimized out>) at ./src/rspamd.c:373
        waiting_worker = 0x7f5ba52894e0
#39 0x00007f5bacef1646 in ev_invoke_pending (loop=0x7f5bacefc280 <default_loop_struct>) at ./contrib/libev/ev.c:3807
        p = <optimized out>
#40 0x00007f5bacef66ad in ev_run (flags=0, loop=0x7f5bacefc280 <default_loop_struct>) at ./contrib/libev/ev.c:4227
        __PRETTY_FUNCTION__ = <optimized out>
#41 ev_run (loop=0x7f5bacefc280 <default_loop_struct>, flags=0) at ./contrib/libev/ev.c:4058
        __PRETTY_FUNCTION__ = "ev_run"
        waittime = <optimized out>
        sleeptime = <optimized out>
        prev_mn_now = <optimized out>
        to = <optimized out>
        to = <optimized out>
#42 0x00005620c119b636 in ev_loop (flags=0, loop=0x7f5bacefc280 <default_loop_struct>) at ./contrib/libev/ev.h:830
No locals.
#43 main (argc=<optimized out>, argv=<optimized out>, env=<optimized out>) at ./src/rspamd.c:1525
        i = <optimized out>
        signals = {__sigaction_handler = {sa_handler = 0x0, sa_sigaction = 0x0}, sa_mask = {__val = {0 <repeats 16 times>}}, sa_flags = 0, sa_restorer = 0x0}
        sigpipe_act = {__sigaction_handler = {sa_handler = 0x1, sa_sigaction = 0x1}, sa_mask = {__val = {4096, 0 <repeats 15 times>}}, sa_flags = 0, sa_restorer = 0x2b9b5cc9}
        pworker = <optimized out>
        type = <optimized out>
        control_addr = 0x7f5ba748bdf0
        event_loop = 0x7f5bacefc280 <default_loop_struct>
        rspamd_main = 0x7f5ba9862000
        skip_pid = 1
        __func__ = "main"
        stat_update_time = <optimized out>