From: Arran Cudbard-Bell Date: Mon, 30 Nov 2020 21:12:45 +0000 (-0700) Subject: Check talloc hierarchy in pair_verify X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=f018c25b6ed40393631faae67b7238266b86b4a2;p=thirdparty%2Ffreeradius-server.git Check talloc hierarchy in pair_verify --- diff --git a/src/lib/util/pair.c b/src/lib/util/pair.c index a128f189ef4..4995f8c4b9a 100644 --- a/src/lib/util/pair.c +++ b/src/lib/util/pair.c @@ -2207,9 +2207,26 @@ void fr_pair_verify(char const *file, int line, fr_pair_t const *vp) break; case FR_TYPE_STRUCTURAL: - if (!vp->vp_group) break; + { + fr_pair_t *child; + fr_cursor_t cursor; - fr_pair_list_verify(file, line, vp, &vp->vp_group); + for (child = fr_cursor_init(&cursor, &vp->vp_group); + child; + child = fr_cursor_next(&cursor)) { + TALLOC_CTX *parent = talloc_parent(child); + + fr_fatal_assert_msg(parent == vp, + "CONSISTENCY CHECK FAILED %s[%u]: fr_pair_t \"%s\" should be parented " + "by fr_pair_t \"%s\". Expected talloc parent %p (%s) got %p (%s)", + file, line, + child->da->name, vp->da->name, + vp, talloc_get_name(vp), + parent, talloc_get_name(parent)); + + fr_pair_verify(file, line, child); + } + } break; default: