]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
lib/dns/rbtdb.c: Add DbC check to safely dereference rbtdb in rbt_datafixer()
authorOndřej Surý <ondrej@sury.org>
Fri, 27 Sep 2019 08:35:49 +0000 (10:35 +0200)
committerOndřej Surý <ondrej@sury.org>
Thu, 3 Oct 2019 07:04:26 +0000 (09:04 +0200)
lib/dns/rbtdb.c

index cef118c5ce9a123a0ce0a764fca70001a864adf5..26d0f1a41ec62faf7a97fd9f51593062838a4f16 100644 (file)
@@ -7081,17 +7081,14 @@ rbt_datafixer(dns_rbtnode_t *rbtnode, void *base, size_t filesize,
        dns_rbtdb_t *rbtdb = (dns_rbtdb_t *) arg;
        rdatasetheader_t *header;
        unsigned char *limit = ((unsigned char *) base) + filesize;
-       unsigned char *p;
-       size_t size;
-       unsigned int count;
 
        REQUIRE(rbtnode != NULL);
+       REQUIRE(VALID_RBTDB(rbtdb));
 
        for (header = rbtnode->data; header != NULL; header = header->next) {
-               p = (unsigned char *) header;
-
-               size = dns_rdataslab_size(p, sizeof(*header));
-               count = dns_rdataslab_count(p, sizeof(*header));;
+               unsigned char *p = (unsigned char *) header;
+               size_t size = dns_rdataslab_size(p, sizeof(*header));
+               unsigned int count = dns_rdataslab_count(p, sizeof(*header));;
                rbtdb->current_version->records += count;
                rbtdb->current_version->bytes += size;
                isc_crc64_update(crc, p, size);
@@ -7105,7 +7102,7 @@ rbt_datafixer(dns_rbtnode_t *rbtnode, void *base, size_t filesize,
                header->node = rbtnode;
                header->node_is_relative = 0;
 
-               if (rbtdb != NULL && RESIGN(header) &&
+               if (RESIGN(header) &&
                    (header->resign != 0 || header->resign_lsb != 0))
                {
                        int idx = header->node->locknum;