[Dovecot] Dovecot deliver Segmentation fault when arrive the first message

Alessio Cecchi alessio at skye.it
Sat Oct 13 15:38:41 EEST 2012


Il 2012-10-02 21:28 Timo Sirainen ha scritto:
> On 19.9.2012, at 16.07, Alessio Cecchi wrote:
>
>> #1  0x00007f2fc9fc41b4 in acl_backend_vfile_acllist_try_rebuild (
>>    backend=0x1944240) at acl-backend-vfile-acllist.c:297
>
> This backtrace is rather weird. Could you also do (instead of bt 
> full):
>
> fr 1
> p *ns
> p *ns.user
> p *auser
>
> It crashes because auser->dict = NULL, but it should never be NULL.

Hi Timo,

this is a new backtrace:

root at demo-vpop ~ # /home/vpopmail/bin/vadduser test160 at qboxdns.it 
qweqweroot at demo-vpop ~ # cat /root/testmail.txt | 
/usr/local/dovecot-2.1/libexec/dovecot/deliver -d test160 at qboxdns.it
Segmentation fault (core dumped)

root at demo-vpop ~ # gdb /usr/local/dovecot-2.1/libexec/dovecot/deliver 
/tmp/10923
GNU gdb (GDB) 7.0.1-debian
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later 
<http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show 
copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>...
Reading symbols from 
/usr/local/dovecot-2.1/libexec/dovecot/deliver...done.

warning: Can't read pathname for load map: Input/output error.
Reading symbols from 
/usr/local/dovecot-2.1/lib/dovecot/libdovecot-lda.so.0...done.
Loaded symbols for 
/usr/local/dovecot-2.1/lib/dovecot/libdovecot-lda.so.0
Reading symbols from 
/usr/local/dovecot-2.1/lib/dovecot/libdovecot-storage.so.0...done.
Loaded symbols for 
/usr/local/dovecot-2.1/lib/dovecot/libdovecot-storage.so.0
Reading symbols from 
/usr/local/dovecot-2.1/lib/dovecot/libdovecot.so.0...done.
Loaded symbols for /usr/local/dovecot-2.1/lib/dovecot/libdovecot.so.0
Reading symbols from /lib/libc.so.6...(no debugging symbols 
found)...done.
Loaded symbols for /lib/libc.so.6
Reading symbols from /lib/librt.so.1...(no debugging symbols 
found)...done.
Loaded symbols for /lib/librt.so.1
Reading symbols from /usr/lib/libssl.so.0.9.8...(no debugging symbols 
found)...done.
Loaded symbols for /usr/lib/libssl.so.0.9.8
Reading symbols from /usr/lib/libcrypto.so.0.9.8...(no debugging 
symbols found)...done.
Loaded symbols for /usr/lib/libcrypto.so.0.9.8
Reading symbols from /lib/libdl.so.2...(no debugging symbols 
found)...done.
Loaded symbols for /lib/libdl.so.2
Reading symbols from /lib64/ld-linux-x86-64.so.2...(no debugging 
symbols found)...done.
Loaded symbols for /lib64/ld-linux-x86-64.so.2
Reading symbols from /lib/libpthread.so.0...(no debugging symbols 
found)...done.
Loaded symbols for /lib/libpthread.so.0
Reading symbols from /usr/lib/libz.so.1...(no debugging symbols 
found)...done.
Loaded symbols for /usr/lib/libz.so.1
Reading symbols from /lib/libnss_files.so.2...(no debugging symbols 
found)...done.
Loaded symbols for /lib/libnss_files.so.2
Reading symbols from 
/usr/local/dovecot-2.1/lib/dovecot/lib01_acl_plugin.so...done.
Loaded symbols for 
/usr/local/dovecot-2.1/lib/dovecot/lib01_acl_plugin.so
Reading symbols from 
/usr/local/dovecot-2.1/lib/dovecot/lib10_quota_plugin.so...done.
Loaded symbols for 
/usr/local/dovecot-2.1/lib/dovecot/lib10_quota_plugin.so
Reading symbols from 
/usr/local/dovecot-2.1/lib/dovecot/lib20_zlib_plugin.so...done.
Loaded symbols for 
/usr/local/dovecot-2.1/lib/dovecot/lib20_zlib_plugin.so
Reading symbols from /lib/libbz2.so.1.0...(no debugging symbols 
found)...done.
Loaded symbols for /lib/libbz2.so.1.0
Reading symbols from 
/usr/local/dovecot-2.1/lib/dovecot/lib90_sieve_plugin.so...done.
Loaded symbols for 
/usr/local/dovecot-2.1/lib/dovecot/lib90_sieve_plugin.so
Reading symbols from 
/usr/local/dovecot-2.1/lib/dovecot/libdovecot-sieve.so.0...done.
Loaded symbols for 
/usr/local/dovecot-2.1/lib/dovecot/libdovecot-sieve.so.0
Core was generated by `/usr/local/dovecot-2.1/libexec/dovecot/deliver 
-d test160 at qboxdns.it'.
Program terminated with signal 11, Segmentation fault.
#0  acl_lookup_dict_rebuild (dict=0x0) at acl-lookup-dict.c:221
221		if (dict->dict == NULL)

(gdb) fr 1
#1  0x00007f9edac761b4 in acl_backend_vfile_acllist_try_rebuild (
     backend=0x2496520) at acl-backend-vfile-acllist.c:297
297			(void)acl_lookup_dict_rebuild(auser->acl_lookup_dict);
(gdb) p *ns
$1 = {next = 0x2496860, refcount = 1, type = NAMESPACE_PRIVATE, flags = 
8235,
   prefix = 0x24961b0 "", prefix_len = 0, alias_for = 0x0,
   alias_chain_next = 0x0, user = 0x249a700, owner = 0x249a700,
   list = 0x249ef40, storage = 0x2496210, set = 0x249b4f0,
   unexpanded_set = 0x249ab58, mail_set = 0x249b200, destroyed = 0}
(gdb) p *ns.user
$2 = {pool = 0x249a6e0, v = {deinit = 0x7f9edac7a280 
<acl_user_deinit>},
   vlast = 0x249bf38, refcount = 1, username = 0x249a7b8 
"test160 at qboxdns.it",
   _home = 0x249bb60 "/home/vpopmail/domains/qboxdns.it/test160", uid = 
89,
   gid = 89, service = 0x249bb90 "lda", local_ip = 0x0, remote_ip = 0x0,
   var_expand_table = 0x249bb98, error = 0x0, set_info = 0x2482ce8,
   unexpanded_set = 0x249a7d0, set = 0x249b168, namespaces = 0x2496130,
   storages = 0x24a1e20, hooks = {arr = {buffer = 0x249beb0, 
element_size = 8},
     v = 0x249beb0, v_modifiable = 0x249beb0}, mountpoints = 0x0,
   module_contexts = {arr = {buffer = 0x249bb00, element_size = 8},
     v = 0x249bb00, v_modifiable = 0x249bb00}, home_looked_up = 1, admin 
= 0,
   autocreated = 0, initialized = 1, mail_debug = 0,
   inbox_open_error_logged = 0, fuzzy_search = 0, dsyncing = 0}
(gdb) p *auser
$3 = {module_ctx = {super = {deinit = 0x7f9edaa68190 
<quota_user_deinit>},
     reg = 0x7f9edaa68190}, master_user = 0x0,
   acl_env = 0x249bd88 
"vfile:/usr/local/dovecot-2.1/etc/dovecot/global-acls:cache_secs=300", 
groups = 0x0, acl_lookup_dict = 0x0}
(gdb)

and also but full for safety:

(gdb) bt full
#0  acl_lookup_dict_rebuild (dict=0x0) at acl-lookup-dict.c:221
         ns = <value optimized out>
         ids_arr = {arr = {buffer = 0x0, element_size = 38363440}, v = 
0x0,
           v_modifiable = 0x0}
         ids = 0x24787e0
         i = <value optimized out>
         dest = <value optimized out>
         ret = -601327851
#1  0x00007f9edac761b4 in acl_backend_vfile_acllist_try_rebuild (
     backend=0x2496520) at acl-backend-vfile-acllist.c:297
         auser = 0x249bf10
         iter = 0x0
         acllist_path = 0x24787e0 
"/home/vpopmail/domains/qboxdns.it/test160/Maildir/dovecot-acl-list"
         ret = <value optimized out>
         ns = 0x2496130
         output = 0x0
         st = {st_dev = 2051, st_ino = 663856, st_nlink = 1, st_mode = 
33152,
           st_uid = 89, st_gid = 89, __pad0 = 0, st_rdev = 0, st_size = 
0,
           st_blksize = 4096, st_blocks = 0, st_atim = {tv_sec = 
1350131151,
             tv_nsec = 0}, st_mtim = {tv_sec = 1350131151, tv_nsec = 0},
           st_ctim = {tv_sec = 1350131151, tv_nsec = 0}, __unused = {0, 
0, 0}}
         path = 0x24783a8
---Type <return> to continue, or q <return> to quit---
         file_mode = 384
         dir_mode = 448
         gid = 4294967295
         list = <value optimized out>
         info = <value optimized out>
         rootdir = 0x24787a0 "Sent"
         origin = 0x249f4c0 
"/home/vpopmail/domains/qboxdns.it/test160/Maildir"
         fd = 8
#2  acl_backend_vfile_acllist_rebuild (backend=0x2496520)
     at acl-backend-vfile-acllist.c:311
         acllist_path = <value optimized out>
#3  0x00007f9edac76563 in acl_backend_vfile_acllist_refresh 
(backend=0x2496520)
     at acl-backend-vfile-acllist.c:153
         __FUNCTION__ = "acl_backend_vfile_acllist_refresh"
#4  0x00007f9edac766d5 in acl_backend_vfile_acllist_verify 
(backend=0x0,
     name=0x2496800 "", mtime=0) at acl-backend-vfile-acllist.c:343
         acllist = <value optimized out>
#5  0x00007f9edac750b8 in acl_backend_vfile_object_refresh_cache (
     _aclobj=0x24967c0) at acl-backend-vfile.c:858
         old_validity = <value optimized out>
         validity = {global_validity = {last_check = 0,
             last_read_time = 1350131151, last_mtime = 0, last_size = 
0},
           local_validity = {last_check = 0, last_read_time = 0,
---Type <return> to continue, or q <return> to quit---
             last_mtime = 0, last_size = 0}, mailbox_validity = {
             last_check = 0, last_read_time = 0, last_mtime = 0, 
last_size = 0}}
         mtime = 0
         ret = 38387472
#6  0x00007f9edac7325e in acl_backend_get_default_rights 
(backend=0x2496520,
     mask_r=0x28) at acl-backend.c:164
No locals.
#7  0x00007f9edac795bd in acl_mailbox_try_list_fast (list=0x249ef40,
     patterns=0x7fff89037330, flags=MAILBOX_LIST_ITER_RETURN_NO_FLAGS)
     at acl-mailbox-list.c:107
         alist = <value optimized out>
         nonowner_list_ctx = <value optimized out>
         ret = <value optimized out>
         backend = 0x2496520
         acl_mask = 0x1
         ns = 0x2496130
         update_ctx = {iter_ctx = 0x7f9edc4bf2c8, tree_ctx = 
0x7f9edcbdda88,
           glob = 0x0, leaf_flags = 4294967295, parent_flags = 0,
           update_only = 0, match_parents = 0}
         name = <value optimized out>
#8  acl_mailbox_list_iter_init (list=0x249ef40, 
patterns=0x7fff89037330,
     flags=MAILBOX_LIST_ITER_RETURN_NO_FLAGS) at acl-mailbox-list.c:194
         _data_stack_cur_id = 2
---Type <return> to continue, or q <return> to quit---
         ctx = 0x2498e60
         pool = <value optimized out>
         i = <value optimized out>
         inboxcase = <value optimized out>
#9  0x00007f9edc538d33 in mailbox_list_iter_init_multiple 
(list=0x249ef40,
     patterns=0x7fff89037330, flags=MAILBOX_LIST_ITER_RETURN_NO_FLAGS)
     at mailbox-list-iter.c:158
         ctx = <value optimized out>
         ret = <value optimized out>
         __FUNCTION__ = "mailbox_list_iter_init_multiple"
#10 0x00007f9edc539459 in mailbox_list_iter_init (list=0x0,
     pattern=<value optimized out>, flags=1350131151) at 
mailbox-list-iter.c:58
         patterns = {0x7f9edaa696dc "*", 0x0}
#11 0x00007f9edaa64370 in quota_count_namespace (root=0x2496cb0,
     bytes_r=<value optimized out>, count_r=0x7fff890373d0) at 
quota-count.c:73
         ctx = 0x7f9edc270ef3
         info = <value optimized out>
#12 quota_count (root=0x2496cb0, bytes_r=<value optimized out>,
     count_r=0x7fff890373d0) at quota-count.c:111
         i = 0
         ret = 0
#13 0x00007f9edaa657ce in dict_quota_count (root=0x0, want_bytes=true,
     value_r=0x7fff89037418) at quota-dict.c:113
---Type <return> to continue, or q <return> to quit---
         dt = <value optimized out>
         bytes = 0
         count = 0
#14 0x00007f9edaa6595a in dict_quota_update_callback (
     ret=<value optimized out>, context=0x249bf10) at quota-dict.c:178
         value = 1
#15 0x00007f9edc244258 in client_dict_finish_transaction 
(dict=0x249eb30,
     line_r=<value optimized out>) at dict-client.c:265
         ctx = 0x24da1b0
#16 client_dict_read_one_line (dict=0x249eb30, line_r=<value optimized 
out>)
     at dict-client.c:356
         id = 1
         line = <value optimized out>
         ret = 0
         __FUNCTION__ = "client_dict_read_one_line"
#17 0x00007f9edc244565 in client_dict_wait (_dict=<value optimized 
out>)
     at dict-client.c:520
         dict = 0x249eb30
         line = 0x0
         ret = <value optimized out>
#18 0x00007f9edaa65ab5 in dict_quota_deinit (_root=<value optimized 
out>)
     at quota-dict.c:90
         root = 0x2496cb0
---Type <return> to continue, or q <return> to quit---
#19 0x00007f9edaa61c72 in quota_root_deinit (root=0x0) at quota.c:240
         pool = 0x249e900
#20 0x00007f9edaa636e1 in quota_deinit (_quota=0x249bf40) at 
quota.c:335
         quota = 0x2496940
         i = 2
#21 0x00007f9edaa681dd in quota_user_deinit (user=0x249a700)
     at quota-storage.c:412
         quser = 0x249bf38
         quota_set = 0x2499270
#22 0x00007f9edc53388e in mail_user_unref (_user=<value optimized out>)
     at mail-user.c:153
         user = 0x249a700
         __FUNCTION__ = "mail_user_unref"
#23 0x0000000000402de2 in main (argc=3, argv=0x247e370) at main.c:481
         set_roots = {0x604640, 0x0}
         ctx = {pool = 0x247ef70, set = 0x24817e8, session = 0x247ef90,
           dup_ctx = 0x0, session_id = 0x0, src_mail = 0x0,
           src_envelope_sender = 0x0, dest_user = 0x0,
           dest_addr = 0x247e3c2 "test160 at qboxdns.it",
           final_dest_addr = 0x247e3c2 "test160 at qboxdns.it",
           dest_mailbox_name = 0x4034d9 "INBOX", dest_mail = 0x0,
           var_expand_table = 0x0, tried_default_save = true,
           saved_mail = false, save_dest_mail = false, mailbox_full = 
false,
---Type <return> to continue, or q <return> to quit---
           dsn = false}
         service_flags = <value optimized out>
         user = 0x247e3c2 "test160 at qboxdns.it"
         errstr = 0x0
         path = 0x7fff89037748 "\351\a"
         storage_service = 0x24803b0
         service_user = 0x2480d58
         service_input = {module = 0x4034d5 "lda", service = 0x4034d5 
"lda",
           username = 0x247e3c2 "test160 at qboxdns.it", session_id = 0x0,
           local_ip = {family = 0, u = {ip6 = {__in6_u = {
                   __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = 
{0, 0,
                     0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, 
ip4 = {
                 s_addr = 0}}}, remote_ip = {family = 0, u = {ip6 = 
{__in6_u = {
                   __u6_addr8 = '\000' <repeats 15 times>, __u6_addr16 = 
{0, 0,
                     0, 0, 0, 0, 0, 0}, __u6_addr32 = {0, 0, 0, 0}}}, 
ip4 = {
                 s_addr = 0}}}, local_port = 0, remote_port = 0,
           userdb_fields = 0x0, flags_override_add = 0,
           flags_override_remove = 0, no_userdb_lookup = 0}
         storage = 0x2496210
         user_source = <value optimized out>
         destaddr_source = 0x403594 "user at hostname"
         process_euid = <value optimized out>
         stderr_rejection = false
---Type <return> to continue, or q <return> to quit---
         ret = <value optimized out>
         c = <value optimized out>
         error = MAIL_ERROR_NONE
(gdb)


and this the dovecot configuration:

# dovecot -n
# 2.1.9: /usr/local/dovecot-2.1/etc/dovecot/dovecot.conf
# OS: Linux 2.6.32-5-amd64 x86_64 Debian 6.0.5
auth_cache_size = 512 k
auth_worker_max_count = 60
default_login_user = nobody
dict {
   acl = 
mysql:/usr/local/dovecot-2.1/etc/dovecot/dovecot-share-folder.conf
   quota = 
mysql:/usr/local/dovecot-2.1/etc/dovecot/dovecot-dict-sql.conf.ext
}
disable_plaintext_auth = no
dotlock_use_excl = no
first_valid_gid = 89
first_valid_uid = 89
last_valid_gid = 89
last_valid_uid = 89
lda_mailbox_autocreate = yes
lda_mailbox_autosubscribe = yes
log_path = /var/log/dovecot/dovecot.log
mail_fsync = always
mail_location = maildir:~/Maildir
mail_nfs_index = yes
mail_nfs_storage = yes
mail_plugins = quota zlib acl
maildir_very_dirty_syncs = yes
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 ihave
mmap_disable = yes
namespace {
   list = children
   location = maildir:%%h/Maildir:INDEX=~/Maildir/shared/%%u
   prefix = shared/%%n/
   separator = /
   subscriptions = no
   type = shared
}
namespace inbox {
   inbox = yes
   location =
   mailbox Drafts {
     auto = subscribe
     special_use = \Drafts
   }
   mailbox Sent {
     auto = subscribe
     special_use = \Sent
   }
   mailbox Spam {
     auto = subscribe
     special_use = \Junk
   }
   mailbox Trash {
     auto = subscribe
     special_use = \Trash
   }
   prefix =
   separator = /
}
passdb {
   args = cache_key=%s%u webmail=109.168.113.215
   driver = vpopmail
}
plugin {
   acl = 
vfile:/usr/local/dovecot-2.1/etc/dovecot/global-acls:cache_secs=300
   acl_shared_dict = proxy::acl
   quota = maildir:UserQuota
   quota2 = dict:User quota::noenforcing:proxy::quota
   quota_rule2 = Trash:storage=+100M
   sieve = ~/.dovecot.sieve
   sieve_default = 
/usr/local/dovecot-2.1/etc/dovecot/sieve/default.sieve
   sieve_dir = ~/sieve
}
protocols = imap pop3 sieve
sendmail_path = /var/qmail/bin/sendmail
service auth {
   unix_listener auth-userdb {
     group = vchkpw
     mode = 0660
     user = vpopmail
   }
}
service dict {
   unix_listener dict {
     group = vchkpw
     mode = 0660
     user = vpopmail
   }
}
service imap-login {
   service_count = 0
}
service managesieve-login {
   inet_listener sieve {
     port = 4190
   }
}
service pop3-login {
   service_count = 0
}
ssl_cert = </etc/ssl/certs/wildcard-cbsolt.net.pem
ssl_key = </etc/ssl/private/wildcard-cbsolt.net.key
userdb {
   args = quota_template=quota_rule=*:backend=%q
   driver = vpopmail
}
protocol lda {
   log_path = /var/log/dovecot/lda.log
   mail_plugins = quota zlib acl sieve
}
protocol imap {
   imap_client_workarounds = delay-newmail tb-extra-mailbox-sep 
tb-lsub-flags
   mail_max_userip_connections = 20
   mail_plugins = quota zlib acl imap_quota imap_acl
}
protocol pop3 {
   mail_max_userip_connections = 5
   pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
}

Thanks



More information about the dovecot mailing list