diff options
author | Alexander Tsoy <alexander@tsoy.me> | 2021-06-28 23:00:11 +0300 |
---|---|---|
committer | Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> | 2021-07-20 17:59:39 +0200 |
commit | 3422b16ef9a85ab0a31558a68db67f148961d4a1 (patch) | |
tree | 45456f04fd77ef9d9c8db9296760f0f77b2fbc89 | |
parent | 7bdc7ff0bb2d1dde1a81b2cbc76e424d1c50b7aa (diff) | |
download | systemd-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.c | 16 |
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: |