blob: b9b01572761f974e217debd3fb426e9cdee33b4d [file] [log] [blame]
Andrew Geissler82c905d2020-04-13 13:39:40 -05001From 382b3b924e43abd1bdc5792918161d0922666691 Mon Sep 17 00:00:00 2001
2From: Nate Karstens <nate.karstens@garmin.com>
3Date: Thu, 10 Aug 2017 08:27:32 -0500
4Subject: [PATCH 10/11] Handle errors from socket calls
5
6Adds handling for socket() or read() returning a
7negative value (indicating an error has occurred).
8
9Upstream-Status: Submitted [dts@apple.com]
10
11Signed-off-by: Nate Karstens <nate.karstens@garmin.com>
12---
13 mDNSPosix/mDNSPosix.c | 12 +++++++++---
14 1 file changed, 9 insertions(+), 3 deletions(-)
15
16diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c
17index 3243ed4..84af26b 100644
18--- a/mDNSPosix/mDNSPosix.c
19+++ b/mDNSPosix/mDNSPosix.c
20@@ -1129,7 +1129,7 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change
21 // Read through the messages on sd and if any indicate that any interface records should
22 // be torn down and rebuilt, return affected indices as a bitmask. Otherwise return 0.
23 {
24- ssize_t readCount;
25+ ssize_t readVal, readCount;
26 char buff[4096];
27 struct nlmsghdr *pNLMsg = (struct nlmsghdr*) buff;
28
29@@ -1138,7 +1138,10 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change
30 // enough to hold all pending data and so avoid message fragmentation.
31 // (Note that FIONREAD is not supported on AF_NETLINK.)
32
33- readCount = read(sd, buff, sizeof buff);
34+ readVal = read(sd, buff, sizeof buff);
35+ if (readVal < 0) return;
36+ readCount = readVal;
37+
38 while (1)
39 {
40 // Make sure we've got an entire nlmsghdr in the buffer, and payload, too.
41@@ -1154,7 +1157,9 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change
42 pNLMsg = (struct nlmsghdr*) buff;
43
44 // read more data
45- readCount += read(sd, buff + readCount, sizeof buff - readCount);
46+ readVal = read(sd, buff + readCount, sizeof buff - readCount);
47+ if (readVal < 0) return;
48+ readCount += readVal;
49 continue; // spin around and revalidate with new readCount
50 }
51 else
52@@ -1429,6 +1434,7 @@ mDNSlocal mDNSBool mDNSPlatformInit_CanReceiveUnicast(void)
53 int err;
54 int s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
55 struct sockaddr_in s5353;
56+ if (s < 0) return mDNSfalse;
57 s5353.sin_family = AF_INET;
58 s5353.sin_port = MulticastDNSPort.NotAnInteger;
59 s5353.sin_addr.s_addr = 0;
60--
612.17.1
62