[RPZ] 9.9.3-rpz2+rl.150.20 fails to launch "due to assertion failure"

Vernon Schryver vjs at rhyolite.com
Fri May 31 01:38:01 UTC 2013

> From: darx+dnsrpz at sent.com

> I've built bind with the latest RPZ+RL patches
>   BIND 9.9.3-rpz2+rl.150.20
> no issues on the build, but at launch, using the same config that
> successfully launches with 9.9.2-P2+patches, it fails with "exiting (due
> to assertion failure)",

> -->     2013-05-30T17:32:34.487118-07:00 core named[16118]:
> parser.c:2432: REQUIRE(prev > 0) failed

> where

> 		cfg_obj_destroy(cfg_parser_t *pctx, cfg_obj_t **objp) {
> 		    cfg_obj_t *obj;
> 2432        unsigned int refs;
> 		    REQUIRE(objp != NULL && *objp != NULL);
> 		    REQUIRE(pctx != NULL);
> 		...

Can you share the response-policy{} and rate-limit{} statements from
the named.conf (or whatever) file?

The nearest plausible "REQUIRE(prev > 0)" is 7 lines later inside the
isc_refcount_decrement() macro at line 2439.
That line number difference is surprising.
Assertions must not be turned off, because it is a REQUIRE() macro
that is assert-botching.
I would not expect the compiler's optimization to move be able to move
the REQUIRE(prev>0) check above the checks on objp and pctx and the
locking inside isc_refcount_decrement().
In other words, could the `named` program that tried to start be other
than the the patched version?  Does `named -V` say something like

What does are the ./configure options disclosed by `named -V`?

Is there a stack trace in a named.run file somewhere?  By adding the 
bogus assertion "REQUIRE(objp == NULL);" before line 2437, I got
these lines in named.run:

    31-May-2013 01:28:33.032 parser.c:2437: REQUIRE(objp == ((void *)0)) failed, bac
    k trace
    31-May-2013 01:28:33.032 #0 0x41934f in assertion_failed()+0x5f
    31-May-2013 01:28:33.032 #1 0x60fd2d in isc_assertion_failed()+0x2d
    31-May-2013 01:28:33.032 #2 0x60b67c in cfg_obj_destroy()+0x7c
    31-May-2013 01:28:33.032 #3 0x43c8e2 in load_configuration()+0x29e2
    31-May-2013 01:28:33.032 #4 0x43d469 in run_server()+0x259
    31-May-2013 01:28:33.032 #5 0x635f42 in dispatch()+0x352
    31-May-2013 01:28:33.032 #6 0x63653d in run()+0x1d
    31-May-2013 01:28:33.032 #7 0x801d9d274 in _fini()+0x80174e7c0
    31-May-2013 01:28:33.032 #8 0x0 in ??
    31-May-2013 01:28:33.032 exiting (due to assertion failure)

ISC has instructions on how to get and submit core files at

Vernon Schryver    vjs at rhyolite.com

More information about the DNSfirewalls mailing list