[master] 7f9a989 Fix NULL deref related to a backend we don't know any more.
Poul-Henning Kamp
phk at FreeBSD.org
Thu Jan 2 11:08:35 CET 2014
commit 7f9a989f2178295d52a92e0be4f2ca2c15cd919b
Author: Poul-Henning Kamp <phk at FreeBSD.org>
Date: Thu Jan 2 10:08:06 2014 +0000
Fix NULL deref related to a backend we don't know any more.
Fixes #1398
diff --git a/bin/varnishd/cache/cache_vrt.c b/bin/varnishd/cache/cache_vrt.c
index a1223fd..617ef4c 100644
--- a/bin/varnishd/cache/cache_vrt.c
+++ b/bin/varnishd/cache/cache_vrt.c
@@ -301,6 +301,8 @@ VRT_IP_string(const struct vrt_ctx *ctx, VCL_IP ip)
unsigned len;
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
+ if (ip == NULL)
+ return (NULL);
len = WS_Reserve(ctx->ws, 0);
p = ctx->ws->f;
VTCP_name(ip, p, len, NULL, 0);
diff --git a/bin/varnishd/cache/cache_vrt_var.c b/bin/varnishd/cache/cache_vrt_var.c
index aec97dd..cb0d42e 100644
--- a/bin/varnishd/cache/cache_vrt_var.c
+++ b/bin/varnishd/cache/cache_vrt_var.c
@@ -251,8 +251,14 @@ VRT_r_beresp_backend_name(const struct vrt_ctx *ctx)
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC);
- CHECK_OBJ_NOTNULL(ctx->bo->vbc, VBC_MAGIC);
- return(ctx->bo->vbc->backend->vcl_name);
+ if (ctx->bo->vbc != NULL) {
+ CHECK_OBJ_NOTNULL(ctx->bo->vbc, VBC_MAGIC);
+ return (ctx->bo->vbc->backend->vcl_name);
+ }
+ if (ctx->bo->director != NULL) {
+ return (ctx->bo->director->vcl_name);
+ }
+ return (NULL);
}
VCL_IP
@@ -261,8 +267,11 @@ VRT_r_beresp_backend_ip(const struct vrt_ctx *ctx)
CHECK_OBJ_NOTNULL(ctx, VRT_CTX_MAGIC);
CHECK_OBJ_NOTNULL(ctx->bo, BUSYOBJ_MAGIC);
- CHECK_OBJ_NOTNULL(ctx->bo->vbc, VBC_MAGIC);
- return(ctx->bo->vbc->addr);
+ if (ctx->bo->vbc != NULL) {
+ CHECK_OBJ_NOTNULL(ctx->bo->vbc, VBC_MAGIC);
+ return(ctx->bo->vbc->addr);
+ } else
+ return (NULL);
}
const char *
diff --git a/bin/varnishtest/tests/r01398.vtc b/bin/varnishtest/tests/r01398.vtc
new file mode 100644
index 0000000..6c5cb7d
--- /dev/null
+++ b/bin/varnishtest/tests/r01398.vtc
@@ -0,0 +1,20 @@
+varnishtest "ticket 1398"
+
+varnish v1 -vcl {
+ backend foo {
+ .host = "${bad_ip}"; .port = "9080";
+ }
+ sub vcl_backend_response {
+ set beresp.http.X-BE-Name = beresp.backend.name;
+ set beresp.http.X-BE-IP = beresp.backend.ip;
+ }
+} -start
+
+client c1 {
+ txreq
+ rxresp
+ expect resp.status == 503
+ expect resp.http.X-BE-Name == foo
+ expect resp.http.X-BE-IP == ""
+} -run
+
More information about the varnish-commit
mailing list