Hello Kim-Alexander Brodowski, I just tried to get some more information from the segfault lines, while not being involved in packaging.
It seems to point to function sieve_bytecode_version in sieve/bc_eval.c:1809. Unfortunately upstream seems to have removed/rewritten that function completely [1]. I hope this is of some help to the maintainer. A little more context in form of a backtrace may still be helpful. That could probably be retrieved by installing a coredump collector like systemd-coredump or corekeeper on the test system. The first one should already print a stack trace to the journal. If no core is collected maybe [2] could help to get one. Kind regards, Bernhard (gdb) list sieve_bytecode_version 1800 1801 int sieve_bytecode_version(const sieve_bytecode_t *bc) 1802 { 1803 if (!bc) return 0; 1804 1805 int version, v_index; 1806 const bytecode_input_t *input = (bytecode_input_t *) bc->data; 1807 1808 v_index = BYTECODE_MAGIC_LEN / sizeof(bytecode_input_t); 1809 version = ntohl(input[v_index].op); <<<<<<<< 1810 1811 /* XXX may need to convert value "1" from host byte order? */ 1812 return version; 1813 } [1] https://github.com/cyrusimap/cyrus-imapd/commit/cf67cc90bc0f8d34d2c5f115bd872cdff041b33e#diff-f5615f080eb69ca914c3ec4e0e8389d0 [2] https://www.cyrusimap.org/imap/reference/faqs/o-coredump.html#faqs-o-coredump
# Buster amd64 qemu VM 2019-04-15 apt update apt dist-upgrade apt install dpkg-dev devscripts mc gdb cyrus-common cyrus-common-dbgsym libc6-dev ########## gdb -q --args /usr/lib/cyrus/bin/lmtpd set width 0 set pagination off b main run generate-core-file /home/benutzer/core-example gdb -q /usr/lib/cyrus/bin/lmtpd --core /home/benutzer/core-example set width 0 set pagination off directory /home/benutzer/source/cyrus-common/orig/cyrus-imapd-3.0.8 ############ mkdir /home/benutzer/source/cyrus-common/orig -p cd /home/benutzer/source/cyrus-common/orig apt source cyrus-common cd ########## # From message #5: kernel: [10870.893304] lmtpd[13473]: segfault at c ip 00007fbb6d918dd9 sp 00007ffc441f15a8 error 4 in libcyrus_sieve.so.0.0.0[7fbb6d913000+18000] kernel: [10870.893310] Code: 24 28 e8 8a a4 ff ff 48 85 c0 49 89 c7 0f 94 c3 e9 47 ff ff ff e8 17 a8 ff ff 0f 1f 80 00 00 00 00 48 85 ff 74 0b 48 8b 47 08 <8b> 40 0c 0f c8 c3 90 31 c0 c3 66 66 2e 0f 1f 84 00 00 00 00 00 66 https://www.enodev.fr/posts/decode-segfault-errors-in-dmesg.html https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/tree/arch/x86/mm/fault.c?h=linux-4.9.y#n31 /* * Page fault error code bits: * * bit 0 ==<-> 0: no page found<----->1: protection fault * bit 1 ==<-> 0: read access> 1: write access * bit 2 ==<-> 0: kernel-mode access<>1: user-mode access * bit 3 ==<-> 1: use of reserved bit detected * bit 4 ==<-> 1: fault was an instruction fetch * bit 5 ==<-> 1: protection keys block access */ enum x86_pf_error_code { PF_PROT> =<-----> 1 << 0, PF_WRITE =<-----> 1 << 1, PF_USER> =<-----> 1 << 2, PF_RSVD> =<-----> 1 << 3, PF_INSTR =<-----> 1 << 4, PF_PK<-> =<-----> 1 << 5, }; "error 4" == 0b100 bit 0 == 0: no page found bit 1 == 0: read access bit 2 == 1: user-mode access ########## crash instruction - start .init == diff 0x00007fbb6d918dd9 - 0x7fbb6d913000 == 0x5DD9 (gdb) info target Symbols from "/usr/lib/cyrus/bin/lmtpd". Native process: Using the running image of child Thread 0x7ffff49f3000 (LWP 1941). While running this, GDB does not access memory from... Local exec file: `/usr/lib/cyrus/bin/lmtpd', file type elf64-x86-64. Entry point: 0x55555555c0c0 0x00005555555542a8 - 0x00005555555542c4 is .interp ... 0x00007ffff7fa0238 - 0x00007ffff7fa025c is .note.gnu.build-id in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa0260 - 0x00007ffff7fa03e0 is .gnu.hash in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa03e0 - 0x00007ffff7fa13a0 is .dynsym in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa13a0 - 0x00007ffff7fa1e43 is .dynstr in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa1e44 - 0x00007ffff7fa1f94 is .gnu.version in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa1f98 - 0x00007ffff7fa1ff8 is .gnu.version_r in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa1ff8 - 0x00007ffff7fa3540 is .rela.dyn in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa3540 - 0x00007ffff7fa4398 is .rela.plt in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa5000 - 0x00007ffff7fa5017 is .init in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa5020 - 0x00007ffff7fa59c0 is .plt in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa59c0 - 0x00007ffff7fa59c8 is .plt.got in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fa59d0 - 0x00007ffff7fbc4d5 is .text in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fbc4d8 - 0x00007ffff7fbc4e1 is .fini in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fbd000 - 0x00007ffff7fc26ca is .rodata in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fc26cc - 0x00007ffff7fc2ce0 is .eh_frame_hdr in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fc2ce0 - 0x00007ffff7fc5034 is .eh_frame in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fc6070 - 0x00007ffff7fc6078 is .init_array in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fc6078 - 0x00007ffff7fc6080 is .fini_array in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fc6080 - 0x00007ffff7fc6798 is .data.rel.ro in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fc6798 - 0x00007ffff7fc6ac8 is .dynamic in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fc6ac8 - 0x00007ffff7fc6fe8 is .got in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fc7000 - 0x00007ffff7fc7030 is .data in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 0x00007ffff7fc7030 - 0x00007ffff7fc7160 is .bss in /usr/lib/x86_64-linux-gnu/libcyrus_sieve.so.0 ... 0x00007ffff4a00008 - 0x00007ffff4a00018 is .bss in /lib/x86_64-linux-gnu/libuuid.so.1 (gdb) current start .init + diff == current ip 0x00007ffff7fa5000 + 0x5DD9 == 0x7FFFF7FAADD9 (gdb) x/84xb 0x7FFFF7FAADD9-42 0x7ffff7faadaf <look_for_me+511>: 24 28 e8 8a a4 ff ff 48 0x7ffff7faadb7 <look_for_me+519>: 85 c0 49 89 c7 0f 94 c3 0x7ffff7faadbf <look_for_me+527>: e9 47 ff ff ff e8 17 a8 0x7ffff7faadc7 <look_for_me+535>: ff ff 0f 1f 80 00 00 00 0x7ffff7faadcf: 00 48 85 ff 74 0b 48 8b 0x7ffff7faadd7 <sieve_bytecode_version+7>: 47 08 8b 40 0c 0f c8 c3 0x7ffff7faaddf <sieve_bytecode_version+15>: 90 31 c0 c3 66 66 2e 0f 0x7ffff7faade7: 1f 84 00 00 00 00 00 66 0x7ffff7faadef: 90 41 57 41 56 41 55 41 0x7ffff7faadf7 <sieve_eval_bc+7>: 54 55 53 48 81 ec 58 11 0x7ffff7faadff <sieve_eval_bc+15>: 00 00 48 8b # From message 5: kernel: [10870.893310] Code: 24 28 e8 8a a4 ff ff 48 85 c0 49 89 c7 0f 94 c3 e9 47 ff ff ff e8 17 a8 ff ff 0f 1f 80 00 00 00 00 48 85 ff 74 0b 48 8b 47 08 <8b> 40 0c 0f c8 c3 90 31 c0 c3 66 66 2e 0f 1f 84 00 00 00 00 00 66 (gdb) disassemble sieve_bytecode_version Dump of assembler code for function sieve_bytecode_version: 0x00007ffff7faadd0 <+0>: test %rdi,%rdi 0x00007ffff7faadd3 <+3>: je 0x7ffff7faade0 <sieve_bytecode_version+16> 0x00007ffff7faadd5 <+5>: mov 0x8(%rdi),%rax 0x00007ffff7faadd9 <+9>: mov 0xc(%rax),%eax <<<<<<<<<<<< 0x00007ffff7faaddc <+12>: bswap %eax 0x00007ffff7faadde <+14>: retq 0x00007ffff7faaddf <+15>: nop 0x00007ffff7faade0 <+16>: xor %eax,%eax 0x00007ffff7faade2 <+18>: retq End of assembler dump. (gdb) b *0x00007ffff7faadd9 Breakpoint 1 at 0x7ffff7faadd9: file /usr/include/x86_64-linux-gnu/bits/byteswap.h, line 52. (gdb) list sieve_bytecode_version 1800 1801 int sieve_bytecode_version(const sieve_bytecode_t *bc) 1802 { 1803 if (!bc) return 0; 1804 1805 int version, v_index; 1806 const bytecode_input_t *input = (bytecode_input_t *) bc->data; 1807 1808 v_index = BYTECODE_MAGIC_LEN / sizeof(bytecode_input_t); 1809 version = ntohl(input[v_index].op); 1810 1811 /* XXX may need to convert value "1" from host byte order? */ 1812 return version; 1813 } sieve/bc_eval.c:1809 (gdb) disassemble /m sieve_bytecode_version Dump of assembler code for function sieve_bytecode_version: 1802 { 1803 if (!bc) return 0; 0x00007ffff7faadd0 <+0>: test %rdi,%rdi 0x00007ffff7faadd3 <+3>: je 0x7ffff7faade0 <sieve_bytecode_version+16> 1804 1805 int version, v_index; 1806 const bytecode_input_t *input = (bytecode_input_t *) bc->data; 1807 1808 v_index = BYTECODE_MAGIC_LEN / sizeof(bytecode_input_t); 1809 version = ntohl(input[v_index].op); 1810 1811 /* XXX may need to convert value "1" from host byte order? */ 1812 return version; 0x00007ffff7faadde <+14>: retq 0x00007ffff7faaddf <+15>: nop 0x00007ffff7faade0 <+16>: xor %eax,%eax 0x00007ffff7faade2 <+18>: retq 0x00007ffff7faade3: data16 nopw %cs:0x0(%rax,%rax,1) 0x00007ffff7faadee: xchg %ax,%ax End of assembler dump. (gdb) ptype sieve_bytecode_t type = struct sieve_bytecode { ino_t inode; const char *data; size_t len; int fd; int is_executing; sieve_bytecode_t *next; } (gdb) ptype bytecode_input_t type = union { int op; int value; int jump; int listlen; int len; int str; } benutzer@debian:~$ cat -n /usr/include/x86_64-linux-gnu/bits/byteswap.h | grep -E "^ 52" -C5 47 48 static __inline __uint32_t 49 __bswap_32 (__uint32_t __bsx) 50 { 51 #if __GNUC_PREREQ (4, 3) 52 return __builtin_bswap32 (__bsx); 53 #else 54 return __bswap_constant_32 (__bsx); 55 #endif 56 } 57