| From 382b3b924e43abd1bdc5792918161d0922666691 Mon Sep 17 00:00:00 2001 |
| From: Nate Karstens <nate.karstens@garmin.com> |
| Date: Thu, 10 Aug 2017 08:27:32 -0500 |
| Subject: [PATCH 10/11] Handle errors from socket calls |
| |
| Adds handling for socket() or read() returning a |
| negative value (indicating an error has occurred). |
| |
| Upstream-Status: Submitted [dts@apple.com] |
| |
| Signed-off-by: Nate Karstens <nate.karstens@garmin.com> |
| --- |
| mDNSPosix/mDNSPosix.c | 12 +++++++++--- |
| 1 file changed, 9 insertions(+), 3 deletions(-) |
| |
| diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c |
| index 3243ed4..84af26b 100644 |
| --- a/mDNSPosix/mDNSPosix.c |
| +++ b/mDNSPosix/mDNSPosix.c |
| @@ -1129,7 +1129,7 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change |
| // Read through the messages on sd and if any indicate that any interface records should |
| // be torn down and rebuilt, return affected indices as a bitmask. Otherwise return 0. |
| { |
| - ssize_t readCount; |
| + ssize_t readVal, readCount; |
| char buff[4096]; |
| struct nlmsghdr *pNLMsg = (struct nlmsghdr*) buff; |
| |
| @@ -1138,7 +1138,10 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change |
| // enough to hold all pending data and so avoid message fragmentation. |
| // (Note that FIONREAD is not supported on AF_NETLINK.) |
| |
| - readCount = read(sd, buff, sizeof buff); |
| + readVal = read(sd, buff, sizeof buff); |
| + if (readVal < 0) return; |
| + readCount = readVal; |
| + |
| while (1) |
| { |
| // Make sure we've got an entire nlmsghdr in the buffer, and payload, too. |
| @@ -1154,7 +1157,9 @@ mDNSlocal void ProcessRoutingNotification(int sd, GenLinkedList *change |
| pNLMsg = (struct nlmsghdr*) buff; |
| |
| // read more data |
| - readCount += read(sd, buff + readCount, sizeof buff - readCount); |
| + readVal = read(sd, buff + readCount, sizeof buff - readCount); |
| + if (readVal < 0) return; |
| + readCount += readVal; |
| continue; // spin around and revalidate with new readCount |
| } |
| else |
| @@ -1429,6 +1434,7 @@ mDNSlocal mDNSBool mDNSPlatformInit_CanReceiveUnicast(void) |
| int err; |
| int s = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP); |
| struct sockaddr_in s5353; |
| + if (s < 0) return mDNSfalse; |
| s5353.sin_family = AF_INET; |
| s5353.sin_port = MulticastDNSPort.NotAnInteger; |
| s5353.sin_addr.s_addr = 0; |
| -- |
| 2.17.1 |
| |