[master] 9e0543c fix VSM_map mmap length for real
Nils Goroll
nils.goroll at uplex.de
Fri Jan 19 08:48:07 UTC 2018
commit 9e0543c8abca2bb70b2b086e291a2d01d20c593b
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Thu Jan 18 06:47:34 2018 +0100
fix VSM_map mmap length for real
I got this wrong in 69695c23e53942968fd65cd4a8627d47d4e21a70 for the
case that the segment spans two pages.
Ref: #2541
mmaps from b25.vtc varnishstat:
before this change:
6598 open("/tmp/vtc.6492.2b3b5875/v1//_.vsm_child/_.VSC_cluster.322833fd50de0860", O_RDONLY) = 21
6598 mmap(NULL, 4096, PROT_READ, MAP_SHARED, 21, 0) = 0x7fb92529e000
...
6598 open("/tmp/vtc.6492.2b3b5875/v1//_.vsm_child/_.VSC_cluster.322833fd50de0860", O_RDONLY) = 21
6598 mmap(NULL, 8192, PROT_READ, MAP_SHARED, 21, 0) = 0x7fb925271000
...
6598 open("/tmp/vtc.6492.2b3b5875/v1//_.vsm_child/_.VSC_cluster.322833fd50de0860", O_RDONLY) = 21
6598 mmap(NULL, 12288, PROT_READ, MAP_SHARED, 21, 0x1000) = 0x7fb925222000
...
6598 open("/tmp/vtc.6492.2b3b5875/v1//_.vsm_child/_.VSC_cluster.322833fd50de0860", O_RDONLY) = 21
6598 mmap(NULL, 12288, PROT_READ, MAP_SHARED, 21, 0x2000) = 0x7fb92521f000
after this change:
7749 open("/tmp/vtc.7648.2c3869d9/v1//_.vsm_child/_.VSC_cluster.09720dc34dd3559c", O_RDONLY) = 21
7749 mmap(NULL, 4096, PROT_READ, MAP_SHARED, 21, 0) = 0x7f0938a28000
...
7749 open("/tmp/vtc.7648.2c3869d9/v1//_.vsm_child/_.VSC_cluster.09720dc34dd3559c", O_RDONLY) = 21
7749 mmap(NULL, 4096, PROT_READ, MAP_SHARED, 21, 0x1000) = 0x7f09389f9000
...
7749 open("/tmp/vtc.7648.2c3869d9/v1//_.vsm_child/_.VSC_cluster.09720dc34dd3559c", O_RDONLY) = 21
7749 mmap(NULL, 8192, PROT_READ, MAP_SHARED, 21, 0x1000) = 0x7f09389d2000
...
7749 open("/tmp/vtc.7648.2c3869d9/v1//_.vsm_child/_.VSC_cluster.09720dc34dd3559c", O_RDONLY) = 21
7749 mmap(NULL, 4096, PROT_READ, MAP_SHARED, 21, 0x2000) = 0x7f09389d1000
Notice that we keep the mappings at one or two pages now and do not increase
the length with the offset.
diff --git a/lib/libvarnishapi/vsm.c b/lib/libvarnishapi/vsm.c
index 0766e53..b2b853c 100644
--- a/lib/libvarnishapi/vsm.c
+++ b/lib/libvarnishapi/vsm.c
@@ -720,7 +720,8 @@ VSM_Map(struct vsm *vd, struct vsm_fantom *vf)
sz = strtoul(vg->av[3], NULL, 10);
assert(sz > 0);
- len = RUP2(of + sz, ps);
+ assert(of >= off);
+ len = RUP2(of - off + sz, ps);
vsb = VSB_new_auto();
AN(vsb);
More information about the varnish-commit
mailing list