From: Maxim Dounin Date: Thu, 17 Oct 2019 13:02:03 +0000 (+0300) Subject: Event pipe: disabled c->read->available checking for SSL. X-Git-Tag: release-1.17.5~6 X-Git-Url: http://www.kaiwu.me/postgresql/commit/?a=commitdiff_plain;h=60609f2372f62628191bf01ed856a46cd488921b;p=nginx.git Event pipe: disabled c->read->available checking for SSL. In SSL connections, data can be buffered by the SSL layer, and it is wrong to avoid doing c->recv_chain() if c->read->available is 0 and c->read->pending_eof is set. And tests show that the optimization in question indeed can result in incorrect detection of premature connection close if upstream closes the connection without sending a close notify alert at the same time. Fix is to disable c->read->available optimization for SSL connections. --- diff --git a/src/event/ngx_event_pipe.c b/src/event/ngx_event_pipe.c index da7c4ee7f..531b13aad 100644 --- a/src/event/ngx_event_pipe.c +++ b/src/event/ngx_event_pipe.c @@ -172,7 +172,11 @@ ngx_event_pipe_read_upstream(ngx_event_pipe_t *p) */ if (p->upstream->read->available == 0 - && p->upstream->read->pending_eof) + && p->upstream->read->pending_eof +#if (NGX_SSL) + && !p->upstream->ssl +#endif + ) { p->upstream->read->ready = 0; p->upstream->read->eof = 1;