imapd crashes with SIGSEGV in mboxlist.c:221

Dmitry Katsubo dma_k at mail.ru
Mon Aug 15 19:40:47 EDT 2011


Dear Cyrus developers,

Sorry for disturbing the developers on cyrus-devel again.

Can somebody in this list help me with the problem I've encountered with
Cyrus? I've spend some time tracing down the problem, debugging,
recompiling and providing finally patch. Does anybody volunteers to find
out what is the real reason of the failure?

Thanks in advance.

On 08.08.2011 5:52, Dmitry Katsubo wrote:
> Dear Cyrus developers,
> 
> I have reported earlier the problem to Debain bugtracker ([1]), but the
> problem seems to have left without attention.
> 
> In my setup imapd causes SEGFAULT with this symptoms:
> 
>> 13:10:57 cyrus/imap[17999]: login: tanja.home [192.168.1.11] dmitry plain+TLS User logged in
>> 13:10:57 kernel: [60608.311267] imapd[17999]: segfault at 0 ip b723049a sp bfe0fefc error 6 in libc-2.13.so[b71bc000+153000]
>> 13:10:57 cyrus/master[2365]: process 17999 exited, signaled to death by 11
>> 13:10:57 cyrus/master[2365]: service imap pid 17999 in BUSY state: terminated abnormally
> 
> and then due to the crash the recovery procedure takes place:
> 
>> 13:10:58 cyrus/imap[18000]: skiplist: recovered /var/lib/cyrus/mailboxes.db (66 records, 5412 bytes) in 1 second
>> 13:10:58 cyrus/imap[18000]: skiplist: recovered /var/lib/cyrus/annotations.db (0 records, 144 bytes) in 0 seconds
>> 13:10:58 cyrus/imap[18000]: accepted connection
> 
> Here goes the stack trace and code pointer:
> 
>> (gdb) bt
>> #0  0xb711549a in ?? () from /lib/i386-linux-gnu/i686/cmov/libc.so.6
>> #1  0x08076278 in mboxlist_mylookup (name=<value optimized out>, typep=<value optimized out>, pathp=0x0,
>>     partp=0xbf88e398, aclp=0xbf88e39c, tid=0x0, wrlock=0) at mboxlist.c:221
>> #2  0x08051272 in mlookup (tag=0x89afcb8 "5", ext_name=0x8ab3130 "INBOX.Sent", name=0xbf88e6e5 "user.dmitry.Sent",
>>     flags=0x0, pathp=0x0, partp=0x0, aclp=0x0, tid=0x0) at imapd.c:412
>> #3  0x08053022 in cmd_select (tag=0x89afcb8 "5", cmd=0x89afd28 "Select", name=0x8ab3130 "INBOX.Sent")
>>     at imapd.c:2619
>> #4  0x08060c96 in cmdloop () at imapd.c:1462
>> #5  0x080620c2 in service_main (argc=1, argv=0x89a7008, envp=0xbf891004) at imapd.c:691
>> #6  0x0804dc3b in main (argc=3, argv=0xbf890ff4, envp=0xbf891004) at service.c:537
>> (gdb) f 1
>> #1  0x08076278 in mboxlist_mylookup (name=<value optimized out>, typep=<value optimized out>, pathp=0x0,
>>     partp=0xbf88e398, aclp=0xbf88e39c, tid=0x0, wrlock=0) at mboxlist.c:221
>> 221                 memcpy(aclresult, p, acllen);
>> (gdb) p aclresult
>> $1 = 0x0
>> (gdb) p p
>> $2 = 0xb4bc516a "default\tdmitry\tlrswipcda\t"
>> (gdb) p acllen
>> $3 = 0
>> (gdb) s
>> Cannot find bounds of current function
>> (gdb) l
>> 206                     r = mboxlist_getpath(part, name, pathp);
>> 207                     if(r) return r;
>> 208                 } else {
>> 209                     r = mboxlist_getpath(partition, name, pathp);
>> 210                     if(r) return r;
>> 211                 }
>> 212             }
>> 213
>> 214             /* the rest is ACL; return it if requested */
>> 215             if (aclp) {
>> 216                 acllen = datalen - (p - data);
>> 217                 if (acllen >= aclresultalloced) {
>> 218                     aclresultalloced = acllen + 100;
>> 219                     aclresult = xrealloc(aclresult, aclresultalloced);
>> 220                 }
>> 221 (!)             memcpy(aclresult, p, acllen);
>> 222                 aclresult[acllen] = '\0';
>> 223
>> 224                 *aclp = aclresult;
>> 225             }
>> 226             break;
>> 227
>> 228         case CYRUSDB_AGAIN:
>> 229             return IMAP_AGAIN;
>> 230             break;
>> 231
>> 232         case CYRUSDB_NOTFOUND:
>> 233             return IMAP_MAILBOX_NONEXISTENT;
>> 234             break;
>> 235
> 
> The solution is mentioned in [1] as well as attached to this letter.
> 
> I wonder is it some corrupted data in my DB that causes the crash? At
> the moment I need to patch Cyrus each time the version is updated in
> Debian repository which is really annoying.
> 
> Also the latest Debian releases (2.2.13p1-15) do not SIGSEGV with patch
> applied, but fail with the following message:
> 
>> cyrus/lmtpunix[30775]: verify_user(user.dmitry) failed: Unknown/invalid partition
> 
> I hope that somebody can help on this maillist.
> 
> [1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=604468


More information about the Cyrus-devel mailing list