aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVladimir Homutov <vl@nginx.com>2018-11-07 13:22:14 +0300
committerVladimir Homutov <vl@nginx.com>2018-11-07 13:22:14 +0300
commit7e3041b79f5b4ae90c1b61c4489f24c2b4d5efc7 (patch)
tree759577d471f312fb8e74785e286156eaf20cf545 /src
parent6351d8306f3c78746798e4e4cfce23936e097fb7 (diff)
downloadnginx-7e3041b79f5b4ae90c1b61c4489f24c2b4d5efc7.tar.gz
nginx-7e3041b79f5b4ae90c1b61c4489f24c2b4d5efc7.zip
Stream: fixed possible use of a freed connection.
The session handler may result in session termination, thus a connection pool (from which c->udp was allocated) may be destroyed.
Diffstat (limited to 'src')
-rw-r--r--src/event/ngx_event_udp.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/src/event/ngx_event_udp.c b/src/event/ngx_event_udp.c
index 8b0ae5539..53b090475 100644
--- a/src/event/ngx_event_udp.c
+++ b/src/event/ngx_event_udp.c
@@ -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;
}