[Dovecot] Dovecot 2.2.10 crash / infinite loop bug

Jani Hast ghast123 at gmail.com
Fri Feb 7 19:53:15 UTC 2014


Hello,

I though this bug should be reported, although there is workaround 
already made and in use.

Dovecot 2.2.10 crashes into out of memory error when there is defined 
system users (userdb+passdb) and own virtual users (userdb+passdb). 
Removing either one solves the issue and Dovecot is working as it 
should. When memory leak (I replaced pw_init and gr_init with the 
version that is found from 2.1.17) is fixed from lib/ipwd.c source, the 
auth worker gets to infinite loop and authentication timeouts(timeout 
was increased, but worker does not end what ever it's doing). This far I 
got chance to debug this before other passdb was removed due lack of time.

Here's logs, configs and backtrace:

Feb  1 07:39:19 openbsd dovecot: auth-worker(30906): Fatal: 
pool_system_realloc(268435456): Out of memory
Feb  1 07:39:19 openbsd dovecot: auth: Error: auth worker: Aborted 
request: Worker process died unexpectedly
Feb  1 07:39:19 openbsd dovecot: auth-worker(30906): Fatal: master: 
service(auth-worker): child 30906 returned error 83 (Out of memory 
(service auth-worker { vsz_limit=256 MB }, you may need to increase it) 
- set CORE_OUTOFMEM=1 environment to get core dump)
Feb  1 07:39:19 openbsd dovecot: auth: Error: static(email at localhost): 
passdb doesn't support lookups, can't verify user's existence
Feb  1 07:39:19 openbsd dovecot: lda: Error: user email at localhost: Auth 
USER lookup failed
Feb  1 07:39:19 openbsd dovecot: lda: Fatal: Internal error occurred. 
Refer to server log for more information.
Feb  1 07:39:19 openbsd postfix/pipe[17487]: 5DBAE5F289: 
to=<email at localhost>, relay=dovecot, delay=37607, 
delays=37606/0.02/0/0.67, dsn=4.3.0, status=deferred (temporary failure)

# 2.2.10: /etc/dovecot/dovecot.conf
# OS: OpenBSD 5.5 i386  ffs
auth_debug = yes
auth_verbose = yes
first_valid_uid = 1000
imap_client_workarounds = delay-newmail tb-extra-mailbox-sep tb-lsub-flags
mail_debug = yes
mail_location = maildir:/var/vmail/mydomain/%n
mbox_write_locks = fcntl
mmap_disable = yes
namespace inbox {
   inbox = yes
   location =
   mailbox Spam {
     auto = subscribe
   }
   prefix =
}
passdb {
   driver = bsdauth
}
passdb {
   args = scheme=CRYPT username_format=%u /etc/dovecot/users
   driver = passwd-file
}
pop3_client_workarounds = outlook-no-nuls oe-ns-eoh
protocols = imap lmtp
service auth {
   unix_listener /var/spool/postfix/private/auth {
     mode = 0666
   }
}
ssl_cert = </cert.pem
ssl_key = </cert.pem
userdb {
   driver = passwd
   override_fields = uid=vmail gid=vmail quota_rule=*:storage=1G
}
userdb {
   args = username_format=%u /etc/dovecot/users
   driver = passwd-file
   override_fields = uid=vmail gid=vmail home=/var/vmail/%d/%u 
quota_rule=*:storage=1G
}
verbose_ssl = yes
protocol imap {
   mail_plugins =
}

(gdb) bt full
#0  0x0221be9d in kill () at <stdin>:2
No locals.
#1  0x02285e36 in raise (s=6) at /usr/src/lib/libc/gen/raise.c:39
No locals.
#2  0x02285d5c in abort () at /usr/src/lib/libc/stdlib/abort.c:70
         p = (struct atexit *) 0x7fc2c000
         mask = 4294967263
         cleanup_called = 1
#3  0x0245dcd4 in default_fatal_finish (type=Variable "type" is not 
available.
) at failures.c:193
         backtrace = Variable "backtrace" is not available.
(gdb) bt
#0  0x0221be9d in kill () at <stdin>:2
#1  0x02285e36 in raise (s=6) at /usr/src/lib/libc/gen/raise.c:39
#2  0x02285d5c in abort () at /usr/src/lib/libc/stdlib/abort.c:70
#3  0x0245dcd4 in default_fatal_finish (type=Variable "type" is not 
available.
) at failures.c:193
#4  0x0245dd4d in i_internal_fatal_handler (ctx=0xcfbec0f4, 
format=0x22406990 "pool_system_realloc(%lu): Out of memory", 
args=0xcfbec118 "") at failures.c:657
#5  0x0245cee3 in i_fatal_status (status=Could not find the frame base 
for "i_fatal_status".
) at failures.c:295
#6  0x02475543 in pool_system_realloc (pool=Could not find the frame 
base for "pool_system_realloc".
) at mempool-system.c:120
#7  0x02464c47 in i_realloc (mem=0x86122000, old_size=134217728, 
new_size=268435456) at imem.c:14
#8  0x0246505c in pw_init () at ipwd.c:23
#9  0x024651f7 in i_getpwnam (name=0x76941140"email at localhost", 
pwd_r=0xcfbec1cc) at ipwd.c:51
#10 0x164eef8e in bsdauth_verify_plain (request=0x76941020, 
password=0x78a183a2 "testi", callback=0x164e0320 
<verify_plain_callback>) at passdb-bsdauth.c:26
#11 0x164e0bf4 in auth_worker_input (client=0x7b386460) at 
auth-worker-client.c:205
#12 0x0246f9c2 in io_loop_call_io (io=0x7d1ae8c0) at ioloop.c:388
#13 0x02470e97 in io_loop_handler_run (ioloop=0x7d1ae3c0) at 
ioloop-kqueue.c:151
#14 0x0246f928 in io_loop_run (ioloop=0x7d1ae3c0) at ioloop.c:412
#15 0x0241609d in master_service_run (service=0x7e433d00, 
callback=0x164e66a0 <worker_connected>) at master-service.c:566
#16 0x164e6cc8 in main (argc=Cannot access memory at address 0x0
) at main.c:393
Current language:  auto; currently asm

Sincerelly,
Jani Hast




More information about the dovecot mailing list