[Dovecot] Segfault in dovecot-lda 2.0.5

Sean Cardus sean at cardus.com
Sun Oct 10 18:30:12 EEST 2010


Hi,

I've recently started using dovecot-lda to handle my local maildir 
deliveries from Exim.  Unfortunately I've been experiencing the 
occasional failed delivery - My Exim logs were showing:

     Child process of virtual_dovecot_delivery transport (running 
command "/usr/local/libexec/dovecot/dovecot-lda -d $local_part@$domain 
-f $sender_address -a $original_local_part@$original_domain") was 
terminated by signal 11 (Segmentation fault)

I originally thought a specific mail was causing the crash, but calling 
the command myself delivered the mail without any issues.  However, I 
found if I ran a script that delivered the same mail 10 times, I could 
reliably cause multiple segfaults all with the following backtrace:

#0  0x005581e9 in maildir_sync_set_new_msgs_count (ctx=0x0, count=1) at 
maildir-sync-index.c:50
No locals.
#1  0x0055f3c0 in maildir_save_move_files_to_newcur (_ctx=0x85afe60) at 
maildir-save.c:857
         files = {arr = {buffer = 0x8555a08, element_size = 4}, v = 
0x8555a08,
           v_modifiable = 0x8555a08}
         mfp = 0x8555a2c
         new_changed = false
         mf = 0x85affa8
         newdir = true
#2  maildir_transaction_save_commit_pre (_ctx=0x85afe60) at 
maildir-save.c:951
         _data_stack_cur_id = 3
         ctx = <value optimized out>
         _t = 0x85af500
         sync_flags = <value optimized out>
         ret = <value optimized out>
         __FUNCTION__ = "maildir_transaction_save_commit_pre"
#3  0x00555e8f in index_transaction_index_commit (index_trans=0x85af540, 
result_r=0xbfd78510)
     at index-transaction.c:27
         it = 0x85af500
         ibox = 0x858a108
         ret = <value optimized out>
         __FUNCTION__ = "index_transaction_index_commit"
#4  0x00595c11 in mail_index_transaction_commit_full (_t=0xbfd78528, 
result_r=0xbfd78510)
     at mail-index-transaction.c:237
         t = 0x85af540
         index = 0x85835e0
         index_undeleted = false
#5  0x00556284 in index_transaction_commit (t=0x85af500, 
changes_r=0xbfd785a8)
     at index-transaction.c:123
         box = 0x8589ef0
         itrans = 0x0
         result = {log_file_seq = 0, log_file_offset = 0, commit_size = 
0, ignored_modseq_changes = 0}
         ret = <value optimized out>
#6  0x00533122 in mailbox_transaction_commit_get_changes (_t=0xbfd785d4, 
changes_r=0xbfd785a8)
     at mail-storage.c:1215
         _data_stack_cur_id = 2
         t = 0x85af500
         ret = <value optimized out>
#7  0x00a7eaef in mail_deliver_save (ctx=0xbfd786f8, mailbox=0x804ab55 
"INBOX", flags=0,
     keywords=0x0, storage_r=0xbfd78794) at mail-deliver.c:219
         open_ctx = {user = 0x85781b0, lda_mailbox_autocreate = false,
           lda_mailbox_autosubscribe = false}
         box = 0x8589ef0
         trans_flags = <value optimized out>
         t = 0x0
         save_ctx = 0x0
         kw = 0x0
         error = MAIL_ERROR_NONE
         mailbox_name = 0x804ab55 "INBOX"
         errstr = <value optimized out>
         changes = {pool = 0x85b5998, uid_validity = 0, saved_uids = 
{arr = {buffer = 0x85b59a8,
               element_size = 8}, v = 0x85b59a8, v_modifiable = 0x85b59a8},
           ignored_modseq_changes = 0}
         range = <value optimized out>
         ret = 0
         __FUNCTION__ = "mail_deliver_save"
#8  0x00a7edf8 in mail_deliver (ctx=0xbfd786f8, storage_r=0xbfd78794) at 
mail-deliver.c:289
         ret = -1
#9  0x0804a124 in main (argc=139843496, argv=0x855d1b8) at main.c:429
         set_roots = {0x804b390, 0x0}
         ctx = {pool = 0x855d7a8, set = 0x855ef48, dup_ctx = 0x0, 
session_id = 0x0,
           src_mail = 0x85856e0, src_envelope_sender = 0x855d7b8 
"sean at cardus.com",
           dest_user = 0x85781b0, dest_addr = 0x855d228 "sean at cardus.com",
           final_dest_addr = 0x855d228 "sean at cardus.com", 
dest_mailbox_name = 0x804ab55 "INBOX",
           dest_mail = 0x0, tried_default_save = true, saved_mail = 
false, save_dest_mail = false}
         service_flags = 1027
         user = 0x1 <Address 0x1 out of bounds>
         errstr = <value optimized out>
         path = 0x0
         storage_service = 0x855e3b0
         service_user = 0x855ec70
         service_input = {module = 0x804ab3c "lda", service = 0x804ab3c 
"lda",
           username = 0x855d202 "sean at cardus.com", 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}}}, userdb_fields = 0x0}
         raw_mail_user = 0x857c1b8
         raw_ns = 0x8571ea8
         raw_ns_set = {name = 0x0, type = 0x0, separator = 0x0, prefix = 
0x0,
           location = 0x804abd9 ":LAYOUT=none", alias_for = 0x0, inbox = 
false, hidden = false,
           list = 0x0, subscriptions = false, user_set = 0x0}
         storage = <value optimized out>
         box = 0x85801c0
         raw_box = <value optimized out>
         input = 0x0
         t = 0x8584d90
         headers_ctx = 0x0
         user_source = 0x804ab2c ""
         sets = <value optimized out>
         process_euid = <value optimized out>
         stderr_rejection = false
         mtime = -1
         ret = <value optimized out>
         c = <value optimized out>
         error = <value optimized out>

Any ideas?

Thanks in advance,
Sean


More information about the dovecot mailing list