[master] 69695c2 Fix pointer arithmatic in VSM_Map(), add a test with 100 backends

Nils Goroll nils.goroll at uplex.de
Mon Jan 15 18:10:06 UTC 2018


commit 69695c23e53942968fd65cd4a8627d47d4e21a70
Author: Nils Goroll <nils.goroll at uplex.de>
Date:   Mon Jan 15 19:00:32 2018 +0100

    Fix pointer arithmatic in VSM_Map(), add a test with 100 backends
    
    Of a VSM segment, we map the least number of pages from the offset into the file
    covering the segment length, aligned to page boundaries. For calculating
    relative pointers into the mapping and the length, we need to deduce the initial
    page boundary offset.
    
    Fixes #2541

diff --git a/bin/varnishtest/tests/b00025.vtc b/bin/varnishtest/tests/b00025.vtc
new file mode 100644
index 0000000..1d23c71
--- /dev/null
+++ b/bin/varnishtest/tests/b00025.vtc
@@ -0,0 +1,113 @@
+varnishtest "more backends"
+
+varnish v1 -arg "-p vcc_err_unref=off" -vcl {
+	backend d0 { .host = "${bad_backend}"; }
+	backend d1 { .host = "${bad_backend}"; }
+	backend d2 { .host = "${bad_backend}"; }
+	backend d3 { .host = "${bad_backend}"; }
+	backend d4 { .host = "${bad_backend}"; }
+	backend d5 { .host = "${bad_backend}"; }
+	backend d6 { .host = "${bad_backend}"; }
+	backend d7 { .host = "${bad_backend}"; }
+	backend d8 { .host = "${bad_backend}"; }
+	backend d9 { .host = "${bad_backend}"; }
+	backend d10 { .host = "${bad_backend}"; }
+	backend d11 { .host = "${bad_backend}"; }
+	backend d12 { .host = "${bad_backend}"; }
+	backend d13 { .host = "${bad_backend}"; }
+	backend d14 { .host = "${bad_backend}"; }
+	backend d15 { .host = "${bad_backend}"; }
+	backend d16 { .host = "${bad_backend}"; }
+	backend d17 { .host = "${bad_backend}"; }
+	backend d18 { .host = "${bad_backend}"; }
+	backend d19 { .host = "${bad_backend}"; }
+	backend d20 { .host = "${bad_backend}"; }
+	backend d21 { .host = "${bad_backend}"; }
+	backend d22 { .host = "${bad_backend}"; }
+	backend d23 { .host = "${bad_backend}"; }
+	backend d24 { .host = "${bad_backend}"; }
+	backend d25 { .host = "${bad_backend}"; }
+	backend d26 { .host = "${bad_backend}"; }
+	backend d27 { .host = "${bad_backend}"; }
+	backend d28 { .host = "${bad_backend}"; }
+	backend d29 { .host = "${bad_backend}"; }
+	backend d30 { .host = "${bad_backend}"; }
+	backend d31 { .host = "${bad_backend}"; }
+	backend d32 { .host = "${bad_backend}"; }
+	backend d33 { .host = "${bad_backend}"; }
+	backend d34 { .host = "${bad_backend}"; }
+	backend d35 { .host = "${bad_backend}"; }
+	backend d36 { .host = "${bad_backend}"; }
+	backend d37 { .host = "${bad_backend}"; }
+	backend d38 { .host = "${bad_backend}"; }
+	backend d39 { .host = "${bad_backend}"; }
+	backend d40 { .host = "${bad_backend}"; }
+	backend d41 { .host = "${bad_backend}"; }
+	backend d42 { .host = "${bad_backend}"; }
+	backend d43 { .host = "${bad_backend}"; }
+	backend d44 { .host = "${bad_backend}"; }
+	backend d45 { .host = "${bad_backend}"; }
+	backend d46 { .host = "${bad_backend}"; }
+	backend d47 { .host = "${bad_backend}"; }
+	backend d48 { .host = "${bad_backend}"; }
+	backend d49 { .host = "${bad_backend}"; }
+	backend d50 { .host = "${bad_backend}"; }
+	backend d51 { .host = "${bad_backend}"; }
+	backend d52 { .host = "${bad_backend}"; }
+	backend d53 { .host = "${bad_backend}"; }
+	backend d54 { .host = "${bad_backend}"; }
+	backend d55 { .host = "${bad_backend}"; }
+	backend d56 { .host = "${bad_backend}"; }
+	backend d57 { .host = "${bad_backend}"; }
+	backend d58 { .host = "${bad_backend}"; }
+	backend d59 { .host = "${bad_backend}"; }
+	backend d60 { .host = "${bad_backend}"; }
+	backend d61 { .host = "${bad_backend}"; }
+	backend d62 { .host = "${bad_backend}"; }
+	backend d63 { .host = "${bad_backend}"; }
+	backend d64 { .host = "${bad_backend}"; }
+	backend d65 { .host = "${bad_backend}"; }
+	backend d66 { .host = "${bad_backend}"; }
+	backend d67 { .host = "${bad_backend}"; }
+	backend d68 { .host = "${bad_backend}"; }
+	backend d69 { .host = "${bad_backend}"; }
+	backend d70 { .host = "${bad_backend}"; }
+	backend d71 { .host = "${bad_backend}"; }
+	backend d72 { .host = "${bad_backend}"; }
+	backend d73 { .host = "${bad_backend}"; }
+	backend d74 { .host = "${bad_backend}"; }
+	backend d75 { .host = "${bad_backend}"; }
+	backend d76 { .host = "${bad_backend}"; }
+	backend d77 { .host = "${bad_backend}"; }
+	# end of 1st 8k VSMW cluster on 64bit
+	backend d78 { .host = "${bad_backend}"; }
+	backend d79 { .host = "${bad_backend}"; }
+	backend d80 { .host = "${bad_backend}"; }
+	backend d81 { .host = "${bad_backend}"; }
+	backend d82 { .host = "${bad_backend}"; }
+	backend d83 { .host = "${bad_backend}"; }
+	backend d84 { .host = "${bad_backend}"; }
+	backend d85 { .host = "${bad_backend}"; }
+	backend d86 { .host = "${bad_backend}"; }
+	backend d87 { .host = "${bad_backend}"; }
+	backend d88 { .host = "${bad_backend}"; }
+	backend d89 { .host = "${bad_backend}"; }
+	backend d90 { .host = "${bad_backend}"; }
+	backend d91 { .host = "${bad_backend}"; }
+	backend d92 { .host = "${bad_backend}"; }
+	backend d93 { .host = "${bad_backend}"; }
+	backend d94 { .host = "${bad_backend}"; }
+	backend d95 { .host = "${bad_backend}"; }
+	backend d96 { .host = "${bad_backend}"; }
+	backend d97 { .host = "${bad_backend}"; }
+	backend d98 { .host = "${bad_backend}"; }
+	backend d99 { .host = "${bad_backend}"; }
+} -start
+
+client c1 {
+	txreq -url "/"
+	rxresp
+	expect resp.status == 503
+} -run
+
+shell -match "d99" "varnishstat -1 -n ${v1_name}"
diff --git a/lib/libvarnishapi/vsm.c b/lib/libvarnishapi/vsm.c
index 889a25e..282865b 100644
--- a/lib/libvarnishapi/vsm.c
+++ b/lib/libvarnishapi/vsm.c
@@ -718,7 +718,7 @@ VSM_Map(struct vsm *vd, struct vsm_fantom *vf)
 
 	sz = strtoul(vg->av[3], NULL, 10);
 	assert(sz > 0);
-	len = RUP2(of + sz, ps);
+	len = RUP2(sz, ps);
 
 	vsb = VSB_new_auto();
 	AN(vsb);
@@ -742,7 +742,7 @@ VSM_Map(struct vsm *vd, struct vsm_fantom *vf)
 	if (vg->s == MAP_FAILED)
 		return (vsm_diag(vd, "Could not mmap segment"));
 
-	vg->b = (char*)(vg->s) + of;
+	vg->b = (char*)(vg->s) + of - off;
 	vg->e = (char *)vg->b + sz;
 	vg->sz = len;
 


More information about the varnish-commit mailing list