summaryrefslogtreecommitdiffhomepage
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
commit1f9564223bc8073e08537526dfdfbb8b5087a5a3 (patch)
treeb018e598ab228b0c4a01643ade94494e7c4f3548 /src
parentde557628d3518ec016787fae7036e430ba2f4874 (diff)
downloadnginx-1f9564223bc8073e08537526dfdfbb8b5087a5a3.tar.gz
nginx-1f9564223bc8073e08537526dfdfbb8b5087a5a3.tar.bz2
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 5a944fc79..b45001e2d 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;
}