Package: rspamd
Version: 1.9.4-2+b1
Severity: normal

Dear Maintainer,
rspamadm segfaults with pcre2 10.34. This can be seen in the ci
tests[1], for which rspamd has a bad-test[2] (?), and manually:

root@sid-rspamd:~# dpkg -l|grep pcre
ii  libpcre2-8-0:amd64         10.34-3+b1                 amd64
New Perl Compatible Regular Expression Library- 8 bit runtime files
ii  libpcre3:amd64             2:8.39-12+b1               amd64
Old Perl 5 Compatible Regular Expression Library - runtime files
root@sid-rspamd:~# dpkg -l|grep rspam
ii  rspamd                     1.9.4-2+b1                 amd64
Rapid spam filtering system

root@sid-rspamd:~# rspamadm configtest
Segmentation fault (core dumped)

This also happens in Ubuntu, where there are no bad-test hints and
where rspamd is stuck in migration. In Ubuntu, if I try with pcre2
10.32-5, it works.

The full backtrace is as follows:
Starting program: /usr/bin/rspamadm configtest
[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.
0x00007ffff6f85714 in pcre2_jit_compile_8 (code=0x0,
options=options@entry=1) at src/pcre2_jit_compile.c:13746
13746    src/pcre2_jit_compile.c: No such file or directory.
#0  0x00007ffff6f85714 in pcre2_jit_compile_8 (code=0x0,
options=options@entry=1) at src/pcre2_jit_compile.c:13746
        re = 0x0
        functions = <optimized out>
        executable_allocator_is_working = 1
#1  0x00007ffff7aa1543 in rspamd_regexp_post_process
(r=0x7ffff196af80) at ./src/libutil/regexp.c:190
        jsz = 658
        jit_flags = 1
        jsz = <optimized out>
        jit_flags = <optimized out>
        __func__ = "rspamd_regexp_post_process"
#2  rspamd_regexp_new (pattern=0x7ffff3b7e6c9 "[$€$¢¥₽]",
flags=0x7ffff47e3600 "u", err=err@entry=0x7fffffffe940) at
./src/libutil/regexp.c:481
        start = <optimized out>
        end = <optimized out>
        flags_str = <optimized out>
        err_str = <optimized out>
        res = 0x7ffff196af80
        explicit_utf = 1
        r = 0x7ffff196aec0
        sep = <optimized out>
        real_pattern = <optimized out>
        err_off = 0
        regexp_flags = 524288
        rspamd_flags = <optimized out>
        err_code = 100
        ncaptures = 658
        strict_flags = <optimized out>
        __func__ = "rspamd_regexp_new"
#3  0x00007ffff7b4b61d in rspamd_mime_expr_parse_regexp_atom
(cfg=<optimized out>, line=0x7ffff3b7e670 "/[$€$¢¥₽]/Hu",
pool=0x7ffff4632000) at ./src/libmime/mime_expressions.c:494
        end = <optimized out>
        p = <optimized out>
        err = 0x0
        re_flags = 0x7ffff47f1400
        begin = 0x7ffff3b7e671 "[$€$¢¥₽]/Hu"
        src = 0x7ffff3b7e668 "Subject=/[$€$¢¥₽]/Hu"
        dbegin = <optimized out>
        start = <optimized out>
        brace = <optimized out>
        dend = 0x7ffff3b7e6d7 ""
        extra = 0x7ffff3b7e6b8 "Subject"
        result = 0x7ffff3b7e688
        begin = <optimized out>
        end = <optimized out>
        p = <optimized out>
        src = <optimized out>
        start = <optimized out>
        brace = <optimized out>
        dbegin = <optimized out>
        dend = <optimized out>
        extra = <optimized out>
        result = <optimized out>
        err = <optimized out>
        re_flags = <optimized out>
        __func__ = "rspamd_mime_expr_parse_regexp_atom"
#4  rspamd_mime_expr_parse (line=<optimized out>, len=<optimized out>,
pool=0x7ffff4632000, ud=<optimized out>, err=0x7fffffffea60) at
./src/libmime/mime_expressions.c:799
        a = 0x0
        mime_atom = 0x7ffff3b7e650
        p = <optimized out>
        end = <optimized out>
        c = <optimized out>
        real_ud = <optimized out>
        cfg = <optimized out>
        own_re = <optimized out>
        t = <optimized out>
        type = <optimized out>
        obraces = <optimized out>
        ebraces = <optimized out>
        state = <optimized out>
        prev_state = <optimized out>
        __func__ = "rspamd_mime_expr_parse"
#5  0x00007ffff7a86378 in rspamd_parse_expression
(line=line@entry=0x7ffff4749480 "Subject=/[$€$¢¥₽]/Hu", len=<optimized
out>, len@entry=0, subr=0x7ffff7d699e0 <mime_expr_subr>,
subr_data=subr_data@entry=0x7fffffffeaf0,
pool=pool@entry=0x7ffff4632000, err=err@entry=0x7fffffffea60,
target=0x7fffffffea58) at ./src/libutil/expression.c:671
        e = 0x7ffff47611d0
        elt = {type = ELT_OP, p = {atom = 0x0, op = OP_INVALID, lim =
0}, flags = 0, priority = 0, value = 0}
        atom = <optimized out>
        num_re = 0x7ffff4645fc0
        op = <optimized out>
        op_stack = <optimized out>
        p = <optimized out>
        c = <optimized out>
        end = <optimized out>
        operand_stack = 0x7ffff47f4e60
        tmp = <optimized out>
        state = <optimized out>
        __func__ = "rspamd_parse_expression"
#6  0x00007ffff7b6842c in read_regexp_expression (pool=0x7ffff4632000,
symbol=0x7ffff4749460 "SUBJECT_HAS_CURRENCY",
line=line@entry=0x7ffff4749480 "Subject=/[$€$¢¥₽]/Hu",
ud=ud@entry=0x7fffffffeaf0, chain=<optimized out>) at
./src/plugins/regexp.c:81
        e = 0x0
        err = 0x0
        __func__ = "read_regexp_expression"
#7  0x00007ffff7b68e8f in regexp_module_config (cfg=0x7ffff4626800) at
./src/plugins/regexp.c:228
        group = 0x0
        flags = 0
        priority = 0
        description = 0x0
        score = 0
        is_lua = 0
        valid_expression = 1
        ud = {cfg = 0x7ffff4626800, conf_obj = 0x7ffff467c780}
        regexp_module_ctx = 0x7ffff3b75f40
        cur_item = 0x7ffff3b7e630
        sec = 0x7ffff47370c0
        value = 0x7ffff467c780
        elt = <optimized out>
        it = 0x7ffff4625e00
        res = 1
        id = <optimized out>
        nre = 27
        nlua = 0
        nshots = 1
        __func__ = "regexp_module_config"
#8  0x00007ffff7af0ceb in rspamd_init_filters (cfg=0x7ffff4626800,
reconfig=reconfig@entry=false) at ./src/libserver/cfg_utils.c:1539
        cur = 0x7ffff463f000
        mod = 0x7ffff7d93460 <regexp_module>
        pmod = <optimized out>
        i = <optimized out>
        mod_ctx = 0x7ffff3b75f40
        cur_ctx = <optimized out>
        ret = 1
        __func__ = "rspamd_init_filters"
#9  0x00005555555662f7 in rspamadm_configtest (argc=<optimized out>,
argv=<optimized out>, cmd=<optimized out>) at
./src/rspamadm/configtest.c:155
        context = <optimized out>
        error = 0x0
        confdir = <optimized out>
        cfg = 0x7ffff4626800
        ret = 1
        pworker = <optimized out>
        log_cnt = <optimized out>
#10 0x0000555555564825 in main (argc=2, argv=<optimized out>,
env=<optimized out>) at ./src/rspamadm/rspamadm.c:561
        error = 0x0
        context = <optimized out>
        og = <optimized out>
        cfg = <optimized out>
        process_quark = <optimized out>
        nargv = 0x7ffff462f460
        targv = 0x7ffff462f460
        cmd_name = <optimized out>
        cmd = 0x55555558e4e0 <configtest_command>
        resolver = <optimized out>
        all_commands = <optimized out>
        i = <optimized out>
        nargc = <optimized out>
        targc = 1
        pworker = <optimized out>
        ev_cfg = 0x7ffff4630f00


I filed this bug against pcre2 upstream, since the crash happens
inside that library: https://bugs.exim.org/show_bug.cgi?id=2487

I didn't file a bug against rspamd upstream yet, as we both are on an
older version (1.9.4 vs 2.2).


1. https://ci.debian.net/data/autopkgtest/unstable/amd64/r/rspamd/3566843/log.gz
2. https://tracker.debian.org/pkg/pcre2:
autopkgtest for rspamd/1.9.4-2: amd64: Ignored failure, arm64: Ignored failure

Reply via email to