One small issue was detected in 2.85 release Coverity scan and is still present in current version. It is in unlikely tftp error path, but still should ensure error is sent in case of interrupt received during sendto().
Patch attached. On 8/25/21 3:46 PM, Simon Kelley wrote: > I just pushed a few final changes, tagged as dnsmasq-2.86rc1. > > I'm fairly confident that this can be released as 2.86 in the near > future, but if you can, please test it now, to avoid disappointment later. > > https://thekelleys.org.uk/dnsmasq/release-candidates/dnsmasq-2.86rc1.tar.gz > > Cheers, > > Simon. > > > _______________________________________________ > Dnsmasq-discuss mailing list > Dnsmasq-discuss@lists.thekelleys.org.uk > https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss > -- Petr Menšík Software Engineer Red Hat, http://www.redhat.com/ email: pemen...@redhat.com PGP: DFCF908DB7C87E8E529925BC4931CA5B6C9FC5CB
>From f5f56c001dddd486859dc6301e6cbe00ba604fe8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemen...@redhat.com> Date: Wed, 18 Aug 2021 10:09:35 +0200 Subject: [PATCH] Retry on interrupted error in tftp Interrupt might arrive when sending error reply. Retry if possible. Wrong Check of Return Value 10. dnsmasq-2.85/src/tftp.c:603: check_return: Calling "sendto(transfer->sockfd, dnsmasq_daemon->packet, len, 0, __CONST_SOCKADDR_ARG({.__sockaddr__ = &peer.sa}), sa_len(&peer))" without checking return value. This library function may fail and return an error code. # 601| prettyprint_addr(&peer, daemon->addrbuff); # 602| len = tftp_err(ERR_TID, daemon->packet, _("ignoring packet from %s (TID mismatch)"), daemon->addrbuff); # 603|-> sendto(transfer->sockfd, daemon->packet, len, 0, &peer.sa, sa_len(&peer)); # 604| } # 605| } --- src/tftp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/tftp.c b/src/tftp.c index 37bdff2..3d87523 100644 --- a/src/tftp.c +++ b/src/tftp.c @@ -600,7 +600,7 @@ void check_tftp_listeners(time_t now) /* Wrong source address. See rfc1350 para 4. */ prettyprint_addr(&peer, daemon->addrbuff); len = tftp_err(ERR_TID, daemon->packet, _("ignoring packet from %s (TID mismatch)"), daemon->addrbuff); - sendto(transfer->sockfd, daemon->packet, len, 0, &peer.sa, sa_len(&peer)); + while(retry_send(sendto(transfer->sockfd, daemon->packet, len, 0, &peer.sa, sa_len(&peer)))); } } } -- 2.31.1
_______________________________________________ Dnsmasq-discuss mailing list Dnsmasq-discuss@lists.thekelleys.org.uk https://lists.thekelleys.org.uk/cgi-bin/mailman/listinfo/dnsmasq-discuss