Hi.

I did a version diff scan between 2.68 and 2.69rc1 version.
>From my point of view there is one thing worth of fixing,
I'm attaching the patch.

I'm also attaching the coverity scan log.

Regards,

Tomas Hozza

Attachment: csdiff_dnsmasq_2.68-2.69rc1.err
Description: Binary data

From d9eb8adbcaec4018f9d39d676d32a02c16f22371 Mon Sep 17 00:00:00 2001
From: Tomas Hozza <tho...@redhat.com>
Date: Mon, 24 Mar 2014 14:43:14 +0100
Subject: [PATCH] Add check for the return value of recvfrom.

recvfrom return signed value which is then passed to functions
that take unsigned value as an argument.

Coverity log:
Error: NEGATIVE_RETURNS (CWE-394):
dnsmasq-2.69rc1/src/forward.c:683: negative_return_fn: Function
"recvfrom(fd, dnsmasq_daemon->packet, dnsmasq_daemon->packet_buff_sz, 0,
__SOCKADDR_ARG({ .__sockaddr__ = &serveraddr.sa}), &addrlen)" returns a
negative number.
dnsmasq-2.69rc1/src/forward.c:683: var_assign: Assigning: signed
variable "n" = "recvfrom(int, void * restrict, size_t, int,
__SOCKADDR_ARG, socklen_t * restrict)".
dnsmasq-2.69rc1/src/forward.c:713: negative_returns: "n" is passed to a
parameter that cannot be negative.
dnsmasq-2.69rc1/src/rfc1035.c:364:62: sizet: "plen" is a size_t
parameter.

Signed-off-by: Tomas Hozza <tho...@redhat.com>
---
 src/forward.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/src/forward.c b/src/forward.c
index 3f4ec62..e4690a0 100644
--- a/src/forward.c
+++ b/src/forward.c
@@ -688,6 +688,12 @@ void reply_query(int fd, int family, time_t now)
   unsigned int crc;
 #endif
 
+  if (n < 0)
+    {
+      my_syslog(LOG_WARNING, _("Failed to receive DNS reply from remote server - (%d) %s"), errno, strerror(errno));
+      return;
+    }
+
   /* packet buffer overwritten */
   daemon->srv_save = NULL;
   
-- 
1.8.5.3

_______________________________________________
Dnsmasq-discuss mailing list
Dnsmasq-discuss@lists.thekelleys.org.uk
http://lists.thekelleys.org.uk/mailman/listinfo/dnsmasq-discuss

Reply via email to