segfault in IMAP APPEND with compressed maildir
Aki Tuomi
aki.tuomi at dovecot.fi
Tue Jun 7 08:52:34 UTC 2016
On 07.06.2016 11:20, Roland Rosenfeld wrote:
> Hi!
>
> After upgrading from Debian wheezy with (self compiled) dovecot 2.2.15
> to Debian jessie with (self compiled) 2.2.24, I observe the following
> segmentation fault in the logs:
>
> Jun 7 09:23:09 imap dovecot: imap(user at example.com): Error: read(<imap client>) failed: read(size=8003) failed: Connection reset by peer (uid=0, box=trash)
> Jun 7 09:23:09 imap dovecot: imap(user at example.com): Error: zlib.read(/srv/mailstore/user at example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001
> Jun 7 09:23:09 imap dovecot: imap(user at example.com): Error: read(zlib(/srv/mailstore/user at example.com/mail/.trash/tmp/1465283884.M336492P22902.imap)) failed: read(/srv/mailstore/user at example.com/mail/.trash/tmp/1465283884.M336492P22902.imap) failed: zlib.read(/srv/mailstore/user at example.com/mail/.trash/tmp/1465283884.M336492P22902.imap): unexpected EOF at 88001 (uid=0, box=trash)
> Jun 7 09:23:09 imap dovecot: imap(user at example.com): Fatal: master: service(imap): child 22902 killed with signal 11 (core dumped)
>
> We also observed the same (rare) error in the past on the old system.
> But on the old system, there were only the first 3 lines without the
> segmentation fault, so we ignored the issue until now.
>
> The problem always happens on IMAP folders where the client writes to,
> like "trash", "drafts", "sent" and the like.
>
> I wasn't able to actively reproduce this issue, but can only observe
> in the logs that some customers run into this issue from time to time.
>
>
> So all I have is a core dump with the following backtrace:
>
> Core was generated by `dovecot/imap'.
> Program terminated with signal SIGSEGV, Segmentation fault.
> (gdb) bt full
> #0 0x00007f57e276f29f in i_stream_default_get_size (stream=0x1fd2790, exact=<optimized out>, size_r=0x7ffed3839718) at istream.c:807
> No locals.
> #1 0x00007f57e17024e4 in zlib_mail_close (_mail=0x1fd4de0) at zlib-plugin.c:170
> mail = 0x1fd4de0
> zmail = 0x1fd5398
> zuser = 0x1fbd040
> cache = 0x1fbd050
> size = 33201320
> #2 0x00007f57e2a2a8b9 in mailbox_save_cancel (_ctx=_ctx at entry=0x1fc4d48) at mail-storage.c:2117
> ctx = 0x1fd3dd0
> keywords = 0x0
> mail = <optimized out>
> __FUNCTION__ = "mailbox_save_cancel"
> #3 0x000000000040c759 in cmd_append_finish (ctx=0x1fc4cf0) at cmd-append.c:149
> __FUNCTION__ = "cmd_append_finish"
> #4 0x000000000040c835 in client_input_append (cmd=0x1fc4bc0) at cmd-append.c:89
> ctx = <optimized out>
> client = 0x1fc3fc0
> reason = 0x1f9e0b8 "Disconnected in APPEND (1 msgs, 306 secs, 188416/1122858 bytes)"
> finished = <optimized out>
> lit_offset = <optimized out>
> __FUNCTION__ = "client_input_append"
> #5 0x00007f57e2778dcc in io_loop_call_io (io=0x1fc4ad0) at ioloop.c:564
> ioloop = 0x1fa6750
> t_id = 2
> __FUNCTION__ = "io_loop_call_io"
> #6 0x00007f57e277a0f1 in io_loop_handler_run_internal (ioloop=ioloop at entry=0x1fa6750) at ioloop-epoll.c:220
> ctx = 0x1fa8260
> io = <optimized out>
> tv = {tv_sec = 1799, tv_usec = 997118}
> events_count = <optimized out>
> msecs = <optimized out>
> ret = 1
> i = 0
> j = <optimized out>
> call = <optimized out>
> __FUNCTION__ = "io_loop_handler_run_internal"
> #7 0x00007f57e2778e55 in io_loop_handler_run (ioloop=ioloop at entry=0x1fa6750) at ioloop.c:612
> No locals.
> #8 0x00007f57e2778ff8 in io_loop_run (ioloop=0x1fa6750) at ioloop.c:588
> __FUNCTION__ = "io_loop_run"
> #9 0x00007f57e2713713 in master_service_run (service=0x1fa65f0, callback=callback at entry=0x423a20 <client_connected>) at master-service.c:640
> No locals.
> #10 0x000000000040c427 in main (argc=1, argv=0x1fa6390) at main.c:460
> set_roots = {0x42c480 <imap_setting_parser_info>, 0x635440 <lda_setting_parser_info>, 0x0}
> login_set = {auth_socket_path = 0x1f9e048 "ailed: Connection reset by peer", postlogin_socket_path = 0x0, postlogin_timeout_secs = 60,
> callback = 0x424170 <login_client_connected>, failure_callback = 0x423b30 <login_client_failed>, request_auth_token = 1}
> service_flags = <optimized out>
> storage_service_flags = <optimized out>
> username = 0x0
> auth_socket_path = 0x42d42e "auth-master"
> c = <optimized out>
>
>
> This is on a server, which uses compressed maildir on a NFS storage.
>
> Here's dovecot -n output:
>
> # 2.2.24 (a82c823): /etc/dovecot/dovecot.conf
> # Pigeonhole version 0.4.14 (099a97c)
> # OS: Linux 3.16.0-4-amd64 x86_64 Debian 8.4
> auth_cache_negative_ttl = 5 mins
> auth_cache_size = 100 M
> auth_cache_ttl = 15 mins
> auth_default_realm = example.com
> auth_master_user_separator = *
> auth_mechanisms = plain login
> auth_verbose = yes
> dict {
> acl = mysql:/etc/dovecot/dovecot-dict-sql.conf
> }
> disable_plaintext_auth = no
> listen = *
> log_timestamp = "%Y-%m-%d %H:%M:%S "
> mail_fsync = always
> mail_gid = 999
> mail_location = maildir:~/mail
> mail_plugins = acl quota zlib
> mail_uid = 999
> managesieve_notify_capability = mailto
> managesieve_sieve_capability = fileinto reject envelope encoded-character vacation subaddress comparator-i;ascii-numeric relational regex imap4flags copy include variables body enotify environment mailbox date index ihave duplicate mime foreverypart extracttext imapflags
> mmap_disable = yes
> namespace {
> list = children
> location = maildir:%%h/mail:INDEX=~/mail/shared/%%u
> prefix = shared/%%u/
> separator = /
> subscriptions = no
> type = shared
> }
> namespace inbox {
> inbox = yes
> location =
> prefix =
> separator = /
> type = private
> }
> passdb {
> args = /etc/dovecot/dovecot-sql.conf
> driver = sql
> }
> plugin {
> acl = vfile
> acl_shared_dict = proxy::acl
> quota = maildir
> sieve = ~/.dovecot.sieve
> sieve_dir = ~/mail/sieve
> sieve_extensions = +imapflags
> zlib_save = gz
> }
> pop3_no_flag_updates = yes
> pop3_uidl_format = %v.%u
> protocols = imap pop3 sieve
> service auth {
> unix_listener auth-master {
> group = vmail
> mode = 0600
> user = vmail
> }
> }
> service dict {
> unix_listener dict {
> group = vmail
> mode = 0600
> user = vmail
> }
> }
> service imap {
> process_limit = 4000
> }
> service managesieve-login {
> inet_listener sieve {
> port = 4190
> }
> }
> service managesieve {
> process_limit = 100
> }
> service pop3 {
> process_limit = 1000
> }
> shutdown_clients = no
> ssl = no
> syslog_facility = local2
> userdb {
> args = /etc/dovecot/dovecot-sql.conf
> driver = sql
> }
> verbose_proctitle = yes
> protocol imap {
> mail_max_userip_connections = 10
> mail_plugins = acl quota zlib imap_quota imap_acl
> }
> protocol pop3 {
> mail_plugins = acl quota zlib
> }
>
>
> I hope, that this is all required information to find and solve this issue.
>
> Greetings
> Roland
Hi!
This would appear to be fixed in
https://github.com/dovecot/core/commit/5df8396a7cbad0b38b83a86667fb3d4c223f6f7c
---
Aki Tuomi
Dovecot Oy
More information about the dovecot
mailing list