Re: lmtpd segfaults after update to 2.4.19, seems it wants to act as proxy

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



>
> Quoting Simon Matter <simon.matter@xxxxxxxxx>:
>
>> Hi,
>>
>> I'm resending this with new subject and one again attached the straces
>> of
>> a delivery with 2.4.18 and 2.4.19.
>>
>>>>> I've just updated our cyrus-imapd rpms from 2.4.18 -> 2.4.19. All
>> seems well with just some small changes to the build.
>>>>>
>>>>> However, I just can't get it to work: lmtpd segfaults on mail
>>>>> delivery.
>>>>>
>>>>> The logs show something like this:
>>>>> May 17 14:21:42 mh1 kernel: lmtpd[7433]: segfault at 5ebc24d7 ip
>> 00007f216292973b sp 00007ffe5ebc1f58 error 4 in
>>>>> lmtpd[7f21628c1000+169000]
>>>>> May 17 14:21:42 mh1 master[7423]: process 7433 exited, signaled to
>>>>> death
>>>>> by 11
>>>>>
>>>>> First I've rebuilt without some of the custom patches in the package
>>>>> like
>>>>> the autocreate patches. But without a change.
>>>>>
>>>>> I've then straced an lmtpd during mail delivery, once with 2.4.18 and
>> once
>>>>> with 2.4.19 in the hope to find something. The traces are attached.
>>>>>
>>>>> I see that there were quite some change concerning lmtp, does anyone
>> of the developers have an idea where the problem in lmtpd changes
>> could be?
>>>>
>>>> It turns out that lmtpd wants to act as proxy, because only then it
>> creates the spoolfile in /tmp/. But why?
>>>> Regards,
>>>> Simon
>>>>
>>>
>>> Are you running a murder setup? Can you produce a coredump and brovide
>>> a
>> backtrace with symbols loaded?
>>
>> Hi,
>>
>> I did two things meanwhile:
>>
>> 1) Built a completely vanilla cyrus-imapd-2.4.19 without any patches to
>> make sure it's not anything wrong with additional patches. The crash was
>> the same.
>>
>> 2) Ran the normal build with an unstripped "lmtpd" binary and produced
>> core and backtrace. So below:
>>
>> Core was generated by `lmtpd'.
>> Program terminated with signal 11, Segmentation fault.
>> #0  strlcpy (dst=0x7ffaa64e00d0 "", src=0x5d73c6c7 <Address 0x5d73c6c7
>> out
>> of bounds>, len=1024) at xstrlcpy.c:65
>> 65		if ((dst[n] = src[n]) == '\0') break;
>> Missing separate debuginfos, use: debuginfo-install
>> cyrus-sasl-gssapi-2.1.23-15.el6_6.2.x86_64
>> cyrus-sasl-lib-2.1.23-15.el6_6.2.x86_64
>> cyrus-sasl-md5-2.1.23-15.el6_6.2.x86_64
>> cyrus-sasl-plain-2.1.23-15.el6_6.2.x86_64 db4-4.7.25-22.el6.x86_64
>> glibc-2.12-1.209.el6_9.1.x86_64 keyutils-libs-1.4-5.el6.x86_64
>> krb5-libs-1.10.3-65.el6.x86_64 libcom_err-1.41.12-23.el6.x86_64
>> libselinux-2.0.94-7.el6.x86_64
>> nss-softokn-freebl-3.14.3-23.3.el6_8.x86_64
>> openssl-1.0.1e-57.el6.x86_64 pcre-7.8-7.el6.x86_64
>> tcp_wrappers-libs-7.6-58.el6.x86_64 zlib-1.2.3-29.el6.x86_64
>> (gdb) bt
>> #0  strlcpy (dst=0x7ffaa64e00d0 "", src=0x5d73c6c7 <Address 0x5d73c6c7
>> out
>> of bounds>, len=1024) at xstrlcpy.c:65
>> #1  0x00007ffaa5150c2e in proxy_adddest (dlist=0x7ffc5d73c288,
>> rcpt=0x7ffaa64d26d0 "simix@xxxxxxxxxxxxxxxxxxxxxx", rcpt_num=0,
>> server=0x5d73c6c7 <Address 0x5d73c6c7 out of bounds>, authas=0x0) at
>> proxy.c:81
>
> here the bt is already in the wrong path and server has not been set
> wich leads to the SIGSEV
>
>> #2  0x00007ffaa514fbae in deliver (msgdata=0x7ffaa64d0950, authuser=0x0,
>> authstate=0x7ffc5d73c280) at lmtpd.c:749
>
> This is the point where the wrong path is taken.
>
>
> r = mlookup(namebuf, &server, NULL, NULL);
> if (!r && server) {
>      /* remote mailbox */
>      proxy_adddest(&dlist, rcpt, n, server, authuser);
>      status[n] = nosieve;
> }
>
> mlookup did return something that is not 0, and server has not been set
> in mlookup. In 2.4.17 there has was "if (server) *server = NULL;"

Hi Michael,

Thanks a lot for pointing me into the right direction. Indeed attached
patch makes it work for me.

I don't know if this is the proper fix for the issue. Hopefully someone
who knows better than me can comment.

Regards,
Simon
--- cyrus-imapd-2.4.19/imap/lmtpd.c.orig	2017-05-15 07:43:30.000000000 +0200
+++ cyrus-imapd-2.4.19/imap/lmtpd.c	2017-05-20 08:36:47.629758869 +0200
@@ -392,6 +392,8 @@
     char *c;
     struct mboxlist_entry mbentry;
 
+    if (server) *server = NULL;
+
     /* do a local lookup and kick the slave if necessary */
     r = mboxlist_lookup(name, &mbentry, tid);
     if (r == IMAP_MAILBOX_NONEXISTENT && config_mupdate_server) {
----
Cyrus Home Page: http://www.cyrusimap.org/
List Archives/Info: http://lists.andrew.cmu.edu/pipermail/info-cyrus/
To Unsubscribe:
https://lists.andrew.cmu.edu/mailman/listinfo/info-cyrus

[Index of Archives]     [Cyrus SASL]     [Squirrel Mail]     [Asterisk PBX]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [KDE]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux