[Dovecot] Segfault in deliver server
Hi Timo, Hi list,
I finally got along to test the current dovecot 1.2 with our Kolab Server. And I'm very excited to see all the cool ACL and shared name spaces stuff upstream, thanks a lot Timo!
Anyway I just stumbled across a new bug using our metadata-plugin (which in turn uses the dict back end):
Making a few annotations requests after another it stops working.
dovecot.log sais something like:
Feb 03 11:58:21 burlywood3 <info> dovecot[10486]: IMAP(4@burlywood3.rgb): metadata_get_metadata_entry: dict key=shared//kolab/var/dovecot/spool/4@burlywood3. rgb/home/maildir/.Calendar//vendor/kolab/folder-type Feb 03 11:58:21 burlywood3 <error> dovecot[10486]: child 10503 (dict) killed with signal 11 Feb 03 11:58:21 burlywood3 <error> dovecot[10486]: IMAP(4@burlywood3.rgb): read(/kolab/var/dovecot/run/dict-server) failed: Connection reset by peer Feb 03 11:58:21 burlywood3 <critical> dovecot[10520]: Fatal: dup2(3) failed: Bad file descriptor Feb 03 11:58:21 burlywood3 <error> dovecot[10486]: child 10520 (dict) returned error 89 (Fatal failure) Feb 03 11:58:21 burlywood3 <critical> dovecot[10486]: Panic: file ioloop.c: line 38 (io_add): assertion failed: (fd >= 0) (END)
I attached gdb to dict and got this:
Program received signal SIGSEGV, Segmentation fault.
array_idx_modifiable_i (array=0x38, idx=0) at array.c:10
10 pos = idx * array->element_size;
(gdb) bt
#0 array_idx_modifiable_i (array=0x38, idx=0) at array.c:10
#1 0x0805e9a2 in sql_pool_unlink (ctx=0x80fb670) at sql-pool.c:64
#2 0x0805ea24 in sql_pool_new (pool=0x80f9470, db_driver=0x80dd498 "sqlite", connect_string=0x810ad78 "/kolab/var/dovecot/lib/metadata-dict.sqlite")
at sql-pool.c:97
#3 0x0805bb3c in sql_dict_init (driver=0x80f9ae0, uri=0xbfce9f76 "/kolab/etc/dovecot/metadata-dict.conf", value_type=DICT_DATA_TYPE_STRING,
username=0x80fb910 "4@burlywood3.rgb") at dict-sql.c:86
#4 0x0805c9ca in dict_init (uri=0xbfce9f6f "sqlite:/kolab/etc/dovecot/metadata-dict.conf", value_type=DICT_DATA_TYPE_STRING,
username=0x80fb910 "4@burlywood3.rgb") at dict.c:87
#5 0x0805a1b1 in dict_client_connection_input (conn=0x80fb8d0) at dict-server.c:407
#6 0x0806637c in io_loop_handler_run (ioloop=0x80f8a80) at ioloop-epoll.c:202
#7 0x080652fd in io_loop_run (ioloop=0x80f8a80) at ioloop.c:338
#8 0x0805a42d in main () at main.c:122
(gdb) li
5
6 void *array_idx_modifiable_i(struct array *array, unsigned int idx)
7 {
8 size_t pos;
9
10 pos = idx * array->element_size;
11 if (pos >= array->buffer->used) {
12 /* index doesn't exist yet, initialize with zero */
13 buffer_append_zero(array->buffer, pos + array->element_size -
14 array->buffer->used);
(gdb) p array
$1 = (struct array *) 0x38
(gdb) p *array
Cannot access memory at address 0x38
(gdb) up
#1 0x0805e9a2 in sql_pool_unlink (ctx=0x80fb670) at sql-pool.c:64
64 next_ctx = SQL_POOL_CONTEXT(ctx->prev);
(gdb) p *ctx
$2 = {module_ctx = {reg = 0x0}, prev = 0x0, next = 0x810d2b0, pool = 0x80f9470, refcount = 0,
key = 0x80fb638 "sqlite\t/kolab/var/dovecot/lib/metadata-dict.sqlite", orig_deinit = 0x805f229
Program terminated with signal SIGSEGV, Segmentation fault. The program no longer exists
It's quite possible, that we got any details in the usage of the dict back end wrong, but I guess that in any case the dict server shouldn't segfault...
cheers sascha
Sascha Wilde OpenPGP key: 4BB86568 http://www.intevation.de/~wilde/ http://www.intevation.de/ Intevation GmbH, Neuer Graben 17, 49074 Osnabrück; AG Osnabrück, HR B 18998 Geschäftsführer: Frank Koormann, Bernhard Reiter, Dr. Jan-Oliver Wagner
On Tue, 2009-02-03 at 12:04 +0100, Sascha Wilde wrote:
#0 array_idx_modifiable_i (array=0x38, idx=0) at array.c:10 #1 0x0805e9a2 in sql_pool_unlink (ctx=0x80fb670) at sql-pool.c:64
Sorry, took a while to get around to looking at this. I think this should fix it: http://hg.dovecot.org/dovecot-1.2/rev/533e4829212a
I guess no one has before been removing connections from the sql pool.
Timo Sirainen tss@iki.fi writes:
On Tue, 2009-02-03 at 12:04 +0100, Sascha Wilde wrote:
#0 array_idx_modifiable_i (array=0x38, idx=0) at array.c:10 #1 0x0805e9a2 in sql_pool_unlink (ctx=0x80fb670) at sql-pool.c:64
Sorry, took a while to get around to looking at this. I think this should fix it: http://hg.dovecot.org/dovecot-1.2/rev/533e4829212a
I guess no one has before been removing connections from the sql pool.
Thanks Timo,
as I didn't stumble across this problem lately I merely forgot about it my self...
cheers sascha
Sascha Wilde OpenPGP key: 4BB86568 http://www.intevation.de/~wilde/ http://www.intevation.de/ Intevation GmbH, Neuer Graben 17, 49074 Osnabrück; AG Osnabrück, HR B 18998 Geschäftsführer: Frank Koormann, Bernhard Reiter, Dr. Jan-Oliver Wagner
participants (2)
-
Sascha Wilde
-
Timo Sirainen