From e01fbe2a45f9641968264a3bdf76d290e20521d7 Mon Sep 17 00:00:00 2001 From: Evan Hunt Date: Mon, 28 Apr 2014 10:24:39 -0700 Subject: [PATCH] [master] SIT/max-cache-size flag collision 3824. [bug] A collision between two flag values could cause problems with cache cleaning when SIT was enabled. [RT #35858] --- CHANGES | 4 ++++ lib/dns/adb.c | 5 ++++- lib/dns/include/dns/resolver.h | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index 71fbd3ad8b..39689a1200 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,7 @@ +3824. [bug] A collision between two flag values could cause + problems with cache cleaning when SIT was enabled. + [RT #35858] + 3823. [func] Log the rpz cname target when rewriting. [RT #35667] 3822. [bug] Log the correct type of static-stub zones when diff --git a/lib/dns/adb.c b/lib/dns/adb.c index f65e744efd..a3ce67f049 100644 --- a/lib/dns/adb.c +++ b/lib/dns/adb.c @@ -357,7 +357,7 @@ static void dump_entry(FILE *, dns_adbentry_t *, isc_boolean_t, isc_stdtime_t); * Private flag(s) for entries. * MUST NOT overlap FCTX_ADDRINFO_xxx and DNS_FETCHOPT_NOEDNS0. */ -#define ENTRY_IS_DEAD 0x80000000 +#define ENTRY_IS_DEAD 0x00400000 /* * To the name, address classes are all that really exist. If it has a @@ -4041,6 +4041,9 @@ dns_adb_changeflags(dns_adb_t *adb, dns_adbaddrinfo_t *addr, REQUIRE(DNS_ADB_VALID(adb)); REQUIRE(DNS_ADBADDRINFO_VALID(addr)); + REQUIRE((bits & ENTRY_IS_DEAD) == 0); + REQUIRE((mask & ENTRY_IS_DEAD) == 0); + bucket = addr->entry->lock_bucket; LOCK(&adb->entrylocks[bucket]); diff --git a/lib/dns/include/dns/resolver.h b/lib/dns/include/dns/resolver.h index 33b4f9e27d..c1afa26fa9 100644 --- a/lib/dns/include/dns/resolver.h +++ b/lib/dns/include/dns/resolver.h @@ -99,6 +99,7 @@ typedef struct dns_fetchevent { #define DNS_FETCHOPT_PREFETCH 0x100 /*%< Request NSID */ #define DNS_FETCHOPT_NOCDFLAG 0x200 /*%< Don't set CD flag. */ +/* Reserved in use by adb.c 0x00400000 */ #define DNS_FETCHOPT_EDNSVERSIONSET 0x00800000 #define DNS_FETCHOPT_EDNSVERSIONMASK 0xff000000 #define DNS_FETCHOPT_EDNSVERSIONSHIFT 24