[master] 52e0dbf35 cache_vcl: Add missing CHECK_OBJ(vdir, VCLDIR_MAGIC)
Nils Goroll
nils.goroll at uplex.de
Thu May 22 07:46:05 UTC 2025
commit 52e0dbf35be0e7d3480e19fa32a907452050929d
Author: Nils Goroll <nils.goroll at uplex.de>
Date: Thu May 22 09:36:08 2025 +0200
cache_vcl: Add missing CHECK_OBJ(vdir, VCLDIR_MAGIC)
Add for cases where we de-reference vdir
diff --git a/bin/varnishd/cache/cache_vcl.c b/bin/varnishd/cache/cache_vcl.c
index cc9c109d1..6a17004e1 100644
--- a/bin/varnishd/cache/cache_vcl.c
+++ b/bin/varnishd/cache/cache_vcl.c
@@ -502,6 +502,7 @@ vdire_iter(struct cli *cli, const char *pat, const struct vcl *vcl,
vdire_start_iter(vdire);
VTAILQ_FOREACH(vdir, &vdire->directors, directors_list) {
+ CHECK_OBJ(vdir, VCLDIR_MAGIC);
if (vdir->refcnt == 0)
continue;
if (pat != NULL && fnmatch(pat, vdir->cli_name, 0))
@@ -531,6 +532,7 @@ vcl_iterdir(struct cli *cli, const char *pat, const struct vcl *vcl,
Lck_AssertHeld(&vcl_mtx);
VTAILQ_FOREACH(vdir, &vcl->vdire->directors, directors_list) {
+ CHECK_OBJ(vdir, VCLDIR_MAGIC);
if (fnmatch(pat, vdir->cli_name, 0))
continue;
found++;
@@ -647,6 +649,7 @@ backend_event_delta(const struct vcl *vcl, enum vcl_event_e e, const struct vclt
Lck_Unlock(vdire->mtx);
while (vdir != NULL) {
+ CHECK_OBJ(vdir, VCLDIR_MAGIC);
VDI_Event(vdir->dir, e);
if (vdir == end)
break;
@@ -677,8 +680,10 @@ vcl_KillBackends(const struct vcl *vcl)
* Unlocked and sidelining vdire because no further directors can be added, and the
* remaining ones need to be able to remove themselves.
*/
- VTAILQ_FOREACH_SAFE(vdir, &vdire->directors, directors_list, vdir2)
+ VTAILQ_FOREACH_SAFE(vdir, &vdire->directors, directors_list, vdir2) {
+ CHECK_OBJ(vdir, VCLDIR_MAGIC);
VDI_Event(vdir->dir, VCL_EVENT_DISCARD);
+ }
assert(VTAILQ_EMPTY(&vdire->directors));
}
More information about the varnish-commit
mailing list