]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
login-proxy: Fix potential crash for delayed disconnects
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Mon, 3 Dec 2018 13:59:13 +0000 (15:59 +0200)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Wed, 6 Feb 2019 08:09:24 +0000 (10:09 +0200)
This happens only with login_proxy_max_disconnect_delay.

Fixes:
Panic: file ioloop.c: line 86 (io_add): assertion failed: (fd >= 0)

src/login-common/login-proxy.c

index 5ca0cbe82575c614b3b72c64160eef18bf79aee6..71fa31881b7ca1921f67353e5cd0c0a6987af3c3 100644 (file)
@@ -414,6 +414,7 @@ static void login_proxy_free_final(struct login_proxy *proxy)
        io_remove(&proxy->client_wait_io);
        i_stream_destroy(&proxy->client_input);
        o_stream_destroy(&proxy->client_output);
+       client_unref(&proxy->client);
        i_free(proxy->host);
        i_free(proxy);
 }
@@ -517,6 +518,8 @@ login_proxy_free_full(struct login_proxy **_proxy, const char *reason,
                if (proxy->callback != NULL)
                        proxy->callback(proxy->client);
        }
+       client->login_proxy = NULL;
+
        if (delay_ms == 0)
                login_proxy_free_final(proxy);
        else {
@@ -524,9 +527,6 @@ login_proxy_free_full(struct login_proxy **_proxy, const char *reason,
                proxy->client_wait_io = io_add_istream(proxy->client_input,
                        proxy_client_disconnected_input, proxy);
        }
-
-       client->login_proxy = NULL;
-       client_unref(&client);
 }
 
 static void ATTR_NULL(2)