]> git.kaiwu.me - nginx.git/commitdiff
SSL: fixed SSL shutdown on lingering close.
authorRuslan Ermilov <ru@nginx.com>
Mon, 7 Dec 2020 22:43:36 +0000 (01:43 +0300)
committerRuslan Ermilov <ru@nginx.com>
Mon, 7 Dec 2020 22:43:36 +0000 (01:43 +0300)
Ensure c->recv is properly reset to ngx_recv if SSL_shutdown()
blocks on writing.

The bug had appeared in 554c6ae25ffc.

src/event/ngx_event_openssl.c
src/http/ngx_http_request.c
src/http/v2/ngx_http_v2.c

index fd2b92ffc06dc3dd768c7917da4f08e946386042..93a6ae46ea694e5a6ab16d57c5e18e2223430048 100644 (file)
@@ -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;
     }
index 12a68a961d97e6e6ed2d2fc644efbe29edd5b798..e954c7c2529ed6d9d5ebf155b564c5790a17e49f 100644 (file)
@@ -3397,8 +3397,6 @@ ngx_http_set_lingering_close(ngx_connection_t *c)
             c->ssl->handler = ngx_http_set_lingering_close;
             return;
         }
-
-        c->recv = ngx_recv;
     }
 #endif
 
index 58916a1845c2686bf6aafe27556757147dcbfd9a..77b60d42e2fbf9f8f44313969f943276d5557387 100644 (file)
@@ -739,8 +739,6 @@ ngx_http_v2_lingering_close(ngx_connection_t *c)
             c->ssl->handler = ngx_http_v2_lingering_close;
             return;
         }
-
-        c->recv = ngx_recv;
     }
 #endif