Mercurial > hg > nginx
diff src/event/ngx_event_openssl.c @ 7751:7efae6b4cfb0
SSL: fixed SSL shutdown on lingering close.
Ensure c->recv is properly reset to ngx_recv if SSL_shutdown()
blocks on writing.
The bug had appeared in 554c6ae25ffc.
author | Ruslan Ermilov <ru@nginx.com> |
---|---|
date | Tue, 08 Dec 2020 01:43:36 +0300 |
parents | a46fcf101cfc |
children | 018a09b766ef f61d347158d0 |
line wrap: on
line diff
--- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -2880,6 +2880,7 @@ ngx_ssl_shutdown(ngx_connection_t *c) SSL_free(c->ssl->connection); c->ssl = NULL; + c->recv = ngx_recv; return NGX_OK; } @@ -2925,6 +2926,7 @@ ngx_ssl_shutdown(ngx_connection_t *c) if (n == 1) { SSL_free(c->ssl->connection); c->ssl = NULL; + c->recv = ngx_recv; return NGX_OK; } @@ -2967,6 +2969,7 @@ ngx_ssl_shutdown(ngx_connection_t *c) if (sslerr == SSL_ERROR_ZERO_RETURN || ERR_peek_error() == 0) { SSL_free(c->ssl->connection); c->ssl = NULL; + c->recv = ngx_recv; return NGX_OK; } @@ -2977,6 +2980,7 @@ ngx_ssl_shutdown(ngx_connection_t *c) SSL_free(c->ssl->connection); c->ssl = NULL; + c->recv = ngx_recv; return NGX_ERROR; }