]> git.kaiwu.me - nginx.git/commitdiff
Stream: fixed possible use of a freed connection.
authorVladimir Homutov <vl@nginx.com>
Wed, 7 Nov 2018 10:22:14 +0000 (13:22 +0300)
committerVladimir Homutov <vl@nginx.com>
Wed, 7 Nov 2018 10:22:14 +0000 (13:22 +0300)
The session handler may result in session termination, thus a connection
pool (from which c->udp was allocated) may be destroyed.

src/event/ngx_event_udp.c

index 8b0ae55394aa89bb5a02a5696bad9de21d437568..53b0904753da3717325c773b6aa326d821123c4b 100644 (file)
@@ -261,7 +261,10 @@ ngx_event_recvmsg(ngx_event_t *ev)
 
             rev->handler(rev);
 
-            c->udp->buffer = NULL;
+            if (c->udp) {
+                c->udp->buffer = NULL;
+            }
+
             rev->ready = 0;
 
             goto next;
@@ -561,6 +564,8 @@ ngx_delete_udp_connection(void *data)
     ngx_connection_t  *c = data;
 
     ngx_rbtree_delete(&c->listening->rbtree, &c->udp->node);
+
+    c->udp = NULL;
 }