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);

Attachment: signature.asc
Description: Digital signature

Reply via email to