From b82c64db86184124760a978c685d3036296843fc Mon Sep 17 00:00:00 2001 From: Riccardo Magliocchetti Date: Mon, 8 Dec 2014 16:53:05 +0100 Subject: [PATCH 1/3] Fix leak on error in bind_to_unix Spotted by cppcheck. --- core/socket.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/core/socket.c b/core/socket.c index 23f8198f..888baa91 100644 --- a/core/socket.c +++ b/core/socket.c @@ -191,7 +191,10 @@ int bind_to_unix(char *socket_name, int listen_queue, int chmod_socket, int abst memset(uws_addr, 0, sizeof(struct sockaddr_un)); serverfd = create_server_socket(AF_UNIX, SOCK_STREAM); - if (serverfd < 0) return -1; + if (serverfd < 0) { + free(uws_addr); + return -1; + } if (abstract_socket == 0) { if (unlink(socket_name) != 0 && errno != ENOENT) { uwsgi_error("error removing unix socket, unlink()"); From 69be96ba769a5c55286778407dd1f5d936bce55c Mon Sep 17 00:00:00 2001 From: Roberto De Ioris Date: Tue, 9 Dec 2014 09:53:45 +0100 Subject: [PATCH 2/3] fixed master-fifo + cheaper --- core/master_utils.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/master_utils.c b/core/master_utils.c index b0d3d288..a83aea6b 100644 --- a/core/master_utils.c +++ b/core/master_utils.c @@ -162,6 +162,7 @@ int uwsgi_calc_cheaper(void) { ignore_algo = 1; } uwsgi.cheaper_fifo_delta = 0; + goto safe; } // if cheaper limits wants to change worker count, then skip cheaper algo @@ -172,6 +173,7 @@ int uwsgi_calc_cheaper(void) { needed_workers = 0; } +safe: if (needed_workers > 0) { for (i = 1; i <= uwsgi.numproc; i++) { if (uwsgi.workers[i].cheaped == 1 && uwsgi.workers[i].pid == 0) { From 5e29359422fc9ce28fe338147cf8abdf6f9d4139 Mon Sep 17 00:00:00 2001 From: Unbit Date: Wed, 10 Dec 2014 10:44:16 +0100 Subject: [PATCH 3/3] another check for mod_proxy_uwsgi --- apache2/mod_proxy_uwsgi.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/apache2/mod_proxy_uwsgi.c b/apache2/mod_proxy_uwsgi.c index 663805db..262ba588 100644 --- a/apache2/mod_proxy_uwsgi.c +++ b/apache2/mod_proxy_uwsgi.c @@ -405,7 +405,10 @@ static int uwsgi_response(request_rec *r, proxy_conn_rec *backend, proxy_server_ // found the last brigade? if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) finish = 1; - if (ap_pass_brigade(r->output_filters, pass_bb) != APR_SUCCESS || c->aborted) { + // do not pass chunk if it is zero_sized + apr_brigade_length(pass_bb, 0, &readbytes); + + if ((readbytes > 0 && ap_pass_brigade(r->output_filters, pass_bb) != APR_SUCCESS) || c->aborted) { finish = 1; }