Hi, On Tue, Dec 07, 2010 at 11:32:20PM +0000, Timo Sirainen wrote: > Could you get gdb backtrace? Something like:
I'm a colleague of Michael's and helped him debug this issue. The interesting part of the backtrace is the following: -- 8< -- #0 acl_object_deinit (_aclobj=0x30) at acl-api.c:23 aclobj = <value optimized out> #1 0x00007f4673f35e84 in acl_backend_deinit (_backend=<value optimized out>) at acl-backend.c:95 backend = (struct acl_backend *) 0x0 -- >8 -- For a reason I haven't investigated yet, "backend" is NULL in "acl_backend_deinit". This leads to a NULL-pointer dereference in "acl_object_deinit". The attached patch protects from this dereference but I have this distinct feeling that I'm treating a symptom here. Best regards, —octo -- noris network AG - Deutschherrnstraße 15-19 - D-90429 Nürnberg - Tel +49-911-9352-0 - Fax +49-911-9352-100 http://www.noris.de - The IT-Outsourcing Company Vorstand: Ingo Kraupa (Vorsitzender), Joachim Astel, Hansjochen Klenk - Vorsitzender des Aufsichtsrats: Stefan Schnabel - AG Nürnberg HRB 17689
diff -pur dovecot-2.0.8.orig/src/plugins/acl/acl-backend.c dovecot-2.0.8.patched/src/plugins/acl/acl-backend.c --- dovecot-2.0.8.orig/src/plugins/acl/acl-backend.c 2010-10-01 16:14:24.000000000 +0200 +++ dovecot-2.0.8.patched/src/plugins/acl/acl-backend.c 2010-12-08 11:29:50.000000000 +0100 @@ -88,8 +88,12 @@ acl_backend_init(const char *data, struc void acl_backend_deinit(struct acl_backend **_backend) { - struct acl_backend *backend = *_backend; + struct acl_backend *backend; + if ((_backend == NULL) || (*_backend == NULL)) + return; + + backend = *_backend; *_backend = NULL; acl_object_deinit(&backend->default_aclobj);
signature.asc
Description: Digital signature