summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Tsoy <alexander@tsoy.me>2021-06-28 23:00:11 +0300
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>2021-07-20 17:59:39 +0200
commit3422b16ef9a85ab0a31558a68db67f148961d4a1 (patch)
tree45456f04fd77ef9d9c8db9296760f0f77b2fbc89
parent7bdc7ff0bb2d1dde1a81b2cbc76e424d1c50b7aa (diff)
downloadsystemd-3422b16ef9a85ab0a31558a68db67f148961d4a1.tar.gz
resolved: do not try to copy empty NSEC types bitmaps
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. (cherry picked from commit 1f00a50c695fe3b55dee38fbd02a902a6c703c87) (cherry picked from commit fc7be6db131a5062dde76ee7857c2f91e1c402cb)
-rw-r--r--src/resolve/resolved-dns-rr.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/src/resolve/resolved-dns-rr.c b/src/resolve/resolved-dns-rr.c
index 52c76eea49..fd975f7f3a 100644
--- a/src/resolve/resolved-dns-rr.c
+++ b/src/resolve/resolved-dns-rr.c
@@ -1626,9 +1626,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:
@@ -1653,9 +1655,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: