]> 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:50:26 +0000 (09:50 +0200)
(cherry picked from commit d508ce4036ce4431b8e6a58697cf890bed6db341)

lib/dns/rbtdb.c

index 88ea886a1d1a7336e5580582ba53e6a358187268..64f6becbecb2dd78a958c186e14356720b3ab3a1 100644 (file)
@@ -7131,17 +7131,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);
@@ -7155,7 +7152,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;