From 4e78aa03034cb4f17b89489cf3986cab45cd530f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= Date: Fri, 28 Jul 2023 15:48:24 +0200 Subject: [PATCH] Backport Coverity fix to hide detected issue Backport already accepted upstream patch. Fixes: 1. Defect type: GCC_ANALYZER_WARNING 2. dnsmasq-2.85/src/forward.c:2335:18: warning[-Wanalyzer-null-dereference]: dereference of NULL 'rfd' Related: rhbz#2156789 --- dnsmasq-2.87-coverity-forward-cache.patch | 77 +++++++++++++++++++++++ dnsmasq.spec | 7 ++- 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 dnsmasq-2.87-coverity-forward-cache.patch diff --git a/dnsmasq-2.87-coverity-forward-cache.patch b/dnsmasq-2.87-coverity-forward-cache.patch new file mode 100644 index 0000000..1c7b2e7 --- /dev/null +++ b/dnsmasq-2.87-coverity-forward-cache.patch @@ -0,0 +1,77 @@ +From 2f45670951d2159ebf588e1e4943c0bc9e1cd20b Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= +Date: Wed, 18 Aug 2021 14:59:23 +0200 +Subject: [PATCH] Add safety checks to places pointed by Coverity + +GCC Analyzer (experimental) + +1. dnsmasq-2.85/src/forward.c:0: scope_hint: In function 'allocate_rfd.part.0' +2. dnsmasq-2.85/src/forward.c:2321:18: warning[-Wanalyzer-null-dereference]: dereference of NULL 'rfd' + # 2319| *fdlp = rfl; + # 2320| + # 2321|-> return rfl->rfd->fd; + # 2322| } + # 2323| + +1. dnsmasq-2.85/src/cache.c:0: scope_hint: In function 'log_query' +2. dnsmasq-2.85/src/cache.c:1969:20: warning[-Wanalyzer-null-dereference]: dereference of NULL 'name' + # 1967| source = "cached"; + # 1968| + # 1969|-> if (strlen(name) == 0) + # 1970| name = "."; + # 1971| + +1. dnsmasq-2.85/src/cache.c:0: scope_hint: In function 'cache_scan_free' +2. dnsmasq-2.85/src/cache.c:436:20: warning[-Wanalyzer-null-argument]: use of NULL 'addr' where non-null expected +40. /usr/include/sys/un.h:37: included_from: Included from here. +41. dnsmasq-2.85/src/dnsmasq.h:101: included_from: Included from here. +42. dnsmasq-2.85/src/cache.c:17: included_from: Included from here. +43. /usr/include/string.h:64:12: note: argument 2 of 'memcmp' must be non-null + # 434| (flags & crecp->flags & F_REVERSE) && + # 435| (flags & crecp->flags & (F_IPV4 | F_IPV6)) && + # 436|-> memcmp(&crecp->addr, addr, addrlen) == 0) + # 437| { + # 438| *up = crecp->hash_next; +--- + src/cache.c | 4 ++-- + src/forward.c | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/cache.c b/src/cache.c +index b3b3c7c..8f97947 100644 +--- a/src/cache.c ++++ b/src/cache.c +@@ -483,7 +483,7 @@ static struct crec *cache_scan_free(char *name, union all_addr *addr, unsigned s + else if (!(crecp->flags & (F_HOSTS | F_DHCP | F_CONFIG)) && + (flags & crecp->flags & F_REVERSE) && + (flags & crecp->flags & (F_IPV4 | F_IPV6)) && +- memcmp(&crecp->addr, addr, addrlen) == 0) ++ addr && memcmp(&crecp->addr, addr, addrlen) == 0) + { + *up = crecp->hash_next; + cache_unlink(crecp); +@@ -2067,7 +2067,7 @@ void log_query(unsigned int flags, char *name, union all_addr *addr, char *arg, + else + source = "cached"; + +- if (strlen(name) == 0) ++ if (name && !name[0]) + name = "."; + + if (option_bool(OPT_EXTRALOG)) +diff --git a/src/forward.c b/src/forward.c +index 434ba77..f3c38d7 100644 +--- a/src/forward.c ++++ b/src/forward.c +@@ -2274,7 +2274,7 @@ int allocate_rfd(struct randfd_list **fdlp, struct server *serv) + } + } + +- if (j == daemon->numrrand) ++ if (!rfd) /* should be when j == daemon->numrrand */ + { + struct randfd_list *rfl_poll; + +-- +2.41.0 + diff --git a/dnsmasq.spec b/dnsmasq.spec index b6ef086..f7397bb 100644 --- a/dnsmasq.spec +++ b/dnsmasq.spec @@ -20,7 +20,7 @@ Name: dnsmasq Version: 2.85 -Release: 13%{?extraversion:.%{extraversion}}%{?dist} +Release: 14%{?extraversion:.%{extraversion}}%{?dist} Summary: A lightweight DHCP/caching DNS server License: GPLv2 or GPLv3 @@ -67,6 +67,8 @@ Patch13: dnsmasq-2.87-log-root-writeable.patch # Downstream only patch; https://bugzilla.redhat.com/show_bug.cgi?id=2209031 # complements patch12 Patch14: dnsmasq-2.85-domain-blocklist-speedup.patch +# https://thekelleys.org.uk/gitweb/?p=dnsmasq.git;h=9bbf098a970c9e5fa251939208e25fb21064d1be +Patch15: dnsmasq-2.87-coverity-forward-cache.patch # This is workaround to nettle bug #1549190 # https://bugzilla.redhat.com/show_bug.cgi?id=1549190 @@ -210,6 +212,9 @@ install -Dpm 644 %{SOURCE2} %{buildroot}%{_sysusersdir}/%{name}.conf %{_mandir}/man1/dhcp_* %changelog +* Fri Jul 28 2023 Petr Menšík - 2.85-14 +- Backport Coverity fix to hide detected issue (#2156789) + * Thu Jul 20 2023 Petr Menšík - 2.85-13 - Rebuild with modified gating settings