[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Strange Bind 9 crash (lenny, squeeze)



Hi.

At $workplace, two of our internal, caching DNS servers, running Bind
9 experienced crashes in quick order today.

I was wondering if other Debian users with Bind 9 have experienced
similar crashes lately, and know how to avoid them (installing other
recursive DNS servers is, of course, an option).

They were both running 1:9.6.ESV.R4+dfsg-0+lenny1 at the time, and
here's the log lines from daemon.log I think are relevant (the logs
are fairly spammy):

May 26 17:16:14 dns2 named[13336]: buffer.c:285: REQUIRE(b->used + 1
<= b->length) failed
May 26 17:16:14 dns2 named[13336]: exiting (due to assertion failure)

May 26 17:36:15 dns1 named[4488]: buffer.c:285: REQUIRE(b->used + 1 <=
b->length) failed
May 26 17:36:15 dns1 named[4488]: exiting (due to assertion failure)

I then upgraded "dns2" to squeeze, which provides 1:9.7.3.dfsg-1~squeeze1.

There was a change: more log entries in daemon.log:


May 26 22:26:19 dns2 named[1608]: buffer.c:285: REQUIRE(b->used + 1 <=
b->length) failed, back trace
May 26 22:26:19 dns2 named[1608]: #0 0xb77ebfa0 in ??
May 26 22:26:19 dns2 named[1608]: #1 0xb7411093 in ??
May 26 22:26:19 dns2 named[1608]: #2 0xb7412d78 in ??
May 26 22:26:19 dns2 named[1608]: #3 0xb76793ce in ??
May 26 22:26:19 dns2 named[1608]: #4 0xb76f7e3e in ??
May 26 22:26:19 dns2 named[1608]: #5 0xb76feb9f in ??
May 26 22:26:19 dns2 named[1608]: #6 0xb7433ebb in ??
May 26 22:26:19 dns2 named[1608]: #7 0xb7235955 in ??
May 26 22:26:19 dns2 named[1608]: #8 0xb708be7e in ??
May 26 22:26:19 dns2 named[1608]: exiting (due to assertion failure)


The relevant code snippet from lib/isc/buffer.c is:


void
isc__buffer_putuint48(isc_buffer_t *b, isc_uint64_t val) {
        isc_uint16_t valhi;
        isc_uint32_t vallo;

        REQUIRE(ISC_BUFFER_VALID(b));
        REQUIRE(b->used + 6 <= b->length);

        valhi = (isc_uint16_t)(val >> 32);
        vallo = (isc_uint32_t)(val & 0xFFFFFFFF);
        ISC__BUFFER_PUTUINT16(b, valhi);
        ISC__BUFFER_PUTUINT32(b, vallo);
}


This function is used via the macro isc_buffer_putuint48 only in lib/dns/tsig.c.

I have googled for these problems, and found other examples of Bind 9
falling over because of assertion failures, but not for this
particular case. I have also found that Bind 10 has copied this code
verbatim, which may not be such a good idea, if it falls over every so
often. :)
--
Jan


Reply to: