aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRuslan Ermilov <ru@nginx.com>2014-11-20 15:24:40 +0300
committerRuslan Ermilov <ru@nginx.com>2014-11-20 15:24:40 +0300
commitd4b7b74686cdfe7488214a210a95da0af0736f8e (patch)
treeed5f0bb3c2f29e71236298bc4e84eccc35be46c9 /src
parent96a62f139603573c9bcf0399d9e261c8a63ca5ce (diff)
downloadnginx-d4b7b74686cdfe7488214a210a95da0af0736f8e.tar.gz
nginx-d4b7b74686cdfe7488214a210a95da0af0736f8e.zip
Resolver: fixed use-after-free memory access.
In 954867a2f0a6, we switched to using resolver node as the timer event data, so make sure we do not free resolver node memory until the corresponding timer is deleted.
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_resolver.c8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
index a17793b13..7aa20ea67 100644
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -1568,8 +1568,6 @@ ngx_resolver_process_a(ngx_resolver_t *r, u_char *buf, size_t last,
ngx_rbtree_delete(&r->name_rbtree, &rn->node);
- ngx_resolver_free_node(r, rn);
-
/* unlock name mutex */
while (next) {
@@ -1580,6 +1578,8 @@ ngx_resolver_process_a(ngx_resolver_t *r, u_char *buf, size_t last,
ctx->handler(ctx);
}
+ ngx_resolver_free_node(r, rn);
+
return;
}
@@ -2143,8 +2143,6 @@ valid:
ngx_rbtree_delete(tree, &rn->node);
- ngx_resolver_free_node(r, rn);
-
/* unlock addr mutex */
while (next) {
@@ -2155,6 +2153,8 @@ valid:
ctx->handler(ctx);
}
+ ngx_resolver_free_node(r, rn);
+
return;
}