]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
resolved: do not try to copy empty NSEC types bitmaps
authorAlexander Tsoy <alexander@tsoy.me>
Mon, 28 Jun 2021 20:00:11 +0000 (23:00 +0300)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Tue, 29 Jun 2021 08:47:18 +0000 (10:47 +0200)
dns_resource_record_copy() assumes that NSEC types bitmap is non-empty
which results in a null pointer dereference inside bitmap_copy() in some
cases. Fix this by calling bitmap_copy() conditionally.

src/resolve/resolved-dns-rr.c

index 5d59a90a8e23141be114b13e96fc5395f9c271e5..4a0327a19dcbf7eec16847ac762027be501e97b8 100644 (file)
@@ -1613,9 +1613,11 @@ DnsResourceRecord *dns_resource_record_copy(DnsResourceRecord *rr) {
                 copy->nsec.next_domain_name = strdup(rr->nsec.next_domain_name);
                 if (!copy->nsec.next_domain_name)
                         return NULL;
-                copy->nsec.types = bitmap_copy(rr->nsec.types);
-                if (!copy->nsec.types)
-                        return NULL;
+                if (rr->nsec.types) {
+                        copy->nsec.types = bitmap_copy(rr->nsec.types);
+                        if (!copy->nsec.types)
+                                return NULL;
+                }
                 break;
 
         case DNS_TYPE_DS:
@@ -1640,9 +1642,11 @@ DnsResourceRecord *dns_resource_record_copy(DnsResourceRecord *rr) {
                 if (!copy->nsec3.next_hashed_name)
                         return NULL;
                 copy->nsec3.next_hashed_name_size = rr->nsec3.next_hashed_name_size;
-                copy->nsec3.types = bitmap_copy(rr->nsec3.types);
-                if (!copy->nsec3.types)
-                        return NULL;
+                if (rr->nsec3.types) {
+                        copy->nsec3.types = bitmap_copy(rr->nsec3.types);
+                        if (!copy->nsec3.types)
+                                return NULL;
+                }
                 break;
 
         case DNS_TYPE_TLSA: