Patch-Source: https://src.fedoraproject.org/rpms/dnsmasq/blob/f36/f/0013-Fix-coverity-issues-detected-in-domain-match.c.patch (backport from upstream) -- From 0dafe990a1395d597bc6022c3936769f7a0ddea7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= Date: Fri, 3 Sep 2021 21:16:22 +0200 Subject: [PATCH 13/15] Fix coverity issues detected in domain-match.c diff --git a/src/domain-match.c b/src/domain-match.c index f8e4796..7124c18 100644 --- a/src/domain-match.c +++ b/src/domain-match.c @@ -411,7 +411,8 @@ size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header addr.addr4 = srv->addr; header->ancount = htons(ntohs(header->ancount) + 1); - add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_A, C_IN, "4", &addr); + if (!add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_A, C_IN, "4", &addr)) + return 0; log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV6, name, (union all_addr *)&addr, NULL); } @@ -426,7 +427,8 @@ size_t make_local_answer(int flags, int gotname, size_t size, struct dns_header addr.addr6 = srv->addr; header->ancount = htons(ntohs(header->ancount) + 1); - add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_AAAA, C_IN, "6", &addr); + if (!add_resource_record(header, limit, &trunc, sizeof(struct dns_header), &p, daemon->local_ttl, NULL, T_AAAA, C_IN, "6", &addr)) + return 0; log_query((flags | F_CONFIG | F_FORWARD) & ~F_IPV4, name, (union all_addr *)&addr, NULL); } @@ -609,9 +611,11 @@ int add_update_server(int flags, if (*domain == 0) alloc_domain = whine_malloc(1); - else if (!(alloc_domain = canonicalise((char *)domain, NULL))) + else + alloc_domain = canonicalise((char *)domain, NULL); + if (!alloc_domain) return 0; - + /* See if there is a suitable candidate, and unmark only do this for forwarding servers, not address or local, to avoid delays on large numbers. */ @@ -643,7 +647,10 @@ int add_update_server(int flags, size = sizeof(struct server); if (!(serv = whine_malloc(size))) - return 0; + { + free(alloc_domain); + return 0; + } if (flags & SERV_IS_LOCAL) { -- 2.31.1