[6.0] d78477d21 Sprinkle CHECK_OBJ_NOTNULL on struct vsm_seg

Martin Blix Grydeland martin at varnish-software.com
Fri Oct 18 13:23:07 UTC 2019


commit d78477d21a3cc36b8733ce8a90e5151cdbddcfed
Author: Martin Blix Grydeland <martin at varnish-software.com>
Date:   Sat Aug 31 12:43:39 2019 +0200

    Sprinkle CHECK_OBJ_NOTNULL on struct vsm_seg
    
    Several places in the code lacked checking that these were still valid
    objects (ie not free'd).

diff --git a/lib/libvarnishapi/vsm.c b/lib/libvarnishapi/vsm.c
index 5c2d6efe1..8f7d469e2 100644
--- a/lib/libvarnishapi/vsm.c
+++ b/lib/libvarnishapi/vsm.c
@@ -525,7 +525,7 @@ vsm_vlu_plus(struct vsm *vd, struct vsm_set *vs, const char *line)
 			VTAILQ_INSERT_TAIL(&vs->clusters, vg, clist);
 		} else if (*vg->av[2] != '0') {
 			vg->cluster = vsm_findcluster(vs, vg->av[1]);
-			AN(vg->cluster);
+			CHECK_OBJ_NOTNULL(vg->cluster, VSM_SEG_MAGIC);
 		}
 	}
 	return (0);
@@ -882,6 +882,7 @@ VSM_Map(struct vsm *vd, struct vsm_fantom *vf)
 		return (0);
 	}
 
+	CHECK_OBJ_NOTNULL(vgc, VSM_SEG_MAGIC);
 	assert(vgc->flags & VSM_FLAG_CLUSTER);
 	assert(vg->s == NULL);
 	assert(vg->sz == 0);
@@ -922,6 +923,7 @@ VSM_Unmap(struct vsm *vd, struct vsm_fantom *vf)
 	vg = vsm_findseg(vd, vf);
 	if (vg == NULL)
 		return (vsm_diag(vd, "VSM_Unmap: bad fantom"));
+	CHECK_OBJ_NOTNULL(vg, VSM_SEG_MAGIC);
 	assert(vg->refs > 0);
 	vg->refs--;
 	vf->b = NULL;
@@ -930,6 +932,7 @@ VSM_Unmap(struct vsm *vd, struct vsm_fantom *vf)
 		return(0);
 
 	if (vg->cluster) {
+		CHECK_OBJ_NOTNULL(vg->cluster, VSM_SEG_MAGIC);
 		assert(vg->s == NULL);
 		assert(vg->sz == 0);
 		assert(vg->cluster->refs > 0);


More information about the varnish-commit mailing list