diff options
Diffstat (limited to 'meta-networking/recipes-protocols/mdns/mdns/0010-Handle-errors-from-socket-calls.patch')
-rw-r--r-- | meta-networking/recipes-protocols/mdns/mdns/0010-Handle-errors-from-socket-calls.patch | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/meta-networking/recipes-protocols/mdns/mdns/0010-Handle-errors-from-socket-calls.patch b/meta-networking/recipes-protocols/mdns/mdns/0010-Handle-errors-from-socket-calls.patch new file mode 100644 index 000000000..b9b015727 --- /dev/null +++ b/meta-networking/recipes-protocols/mdns/mdns/0010-Handle-errors-from-socket-calls.patch | |||
@@ -0,0 +1,62 @@ | |||
1 | From 382b3b924e43abd1bdc5792918161d0922666691 Mon Sep 17 00:00:00 2001 | ||
2 | From: Nate Karstens <nate.karstens@garmin.com> | ||
3 | Date: Thu, 10 Aug 2017 08:27:32 -0500 | ||
4 | Subject: [PATCH 10/11] Handle errors from socket calls | ||
5 | |||
6 | Adds handling for socket() or read() returning a | ||
7 | negative value (indicating an error has occurred). | ||
8 | |||
9 | Upstream-Status: Submitted [dts@apple.com] | ||
10 | |||
11 | Signed-off-by: Nate Karstens <nate.karstens@garmin.com> | ||
12 | --- | ||
13 | mDNSPosix/mDNSPosix.c | 12 +++++++++--- | ||
14 | 1 file changed, 9 insertions(+), 3 deletions(-) | ||
15 | |||
16 | diff --git a/mDNSPosix/mDNSPosix.c b/mDNSPosix/mDNSPosix.c | ||
17 | index 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 | -- | ||
61 | 2.17.1 | ||
62 | |||