readsb: new package
[feed/packages.git] / utils / readsb / patches / 001-network-avoid-segfault-in-freeaddrinfo.patch
1 From 82014a5fa9930b0875e57869265acf011772277c Mon Sep 17 00:00:00 2001
2 From: Stijn Tintel <stijn@linux-ipv6.be>
3 Date: Sun, 3 May 2020 20:56:58 +0300
4 Subject: [PATCH] network: avoid segfault in freeaddrinfo
5
6 Calling freeaddrinfo(NULL) when using musl libc causes a segfault.
7
8 Signed-off-by: Stijn Tintel <stijn@linux-ipv6.be>
9 ---
10 anet.c | 15 ++++++++++++---
11 net_io.c | 5 ++++-
12 viewadsb.c | 5 ++++-
13 3 files changed, 20 insertions(+), 5 deletions(-)
14
15 diff --git a/anet.c b/anet.c
16 index 5c35ff8..7f01958 100644
17 --- a/anet.c
18 +++ b/anet.c
19 @@ -212,7 +212,10 @@ static int anetTcpGenericConnect(char *err, char *addr, char *service, int flags
20 if (ss) {
21 memcpy(ss, p->ai_addr, sizeof(*ss));
22 }
23 - freeaddrinfo(gai_result);
24 + if (gai_result) {
25 + freeaddrinfo(gai_result);
26 + gai_result = NULL;
27 + }
28 return s;
29 }
30
31 @@ -220,7 +223,10 @@ static int anetTcpGenericConnect(char *err, char *addr, char *service, int flags
32 anetCloseSocket(s);
33 }
34
35 - freeaddrinfo(gai_result);
36 + if (gai_result) {
37 + freeaddrinfo(gai_result);
38 + gai_result = NULL;
39 + }
40 return ANET_ERR;
41 }
42
43 @@ -368,7 +374,10 @@ int anetTcpServer(char *err, char *service, char *bindaddr, int *fds, int nfds)
44 fds[i++] = s;
45 }
46
47 - freeaddrinfo(gai_result);
48 + if (gai_result) {
49 + freeaddrinfo(gai_result);
50 + gai_result = NULL;
51 + }
52 return (i > 0 ? i : ANET_ERR);
53 }
54
55 diff --git a/net_io.c b/net_io.c
56 index 1f4d848..5f59194 100644
57 --- a/net_io.c
58 +++ b/net_io.c
59 @@ -3285,7 +3285,10 @@ void cleanupNetwork(void) {
60 for (int i = 0; i < Modes.net_connectors_count; i++) {
61 struct net_connector *con = Modes.net_connectors[i];
62 free(con->address);
63 - freeaddrinfo(con->addr_info);
64 + if (con->addr_info) {
65 + freeaddrinfo(con->addr_info);
66 + con->addr_info = NULL;
67 + }
68 if (con->mutex) {
69 pthread_mutex_unlock(con->mutex);
70 pthread_mutex_destroy(con->mutex);
71 diff --git a/viewadsb.c b/viewadsb.c
72 index 5fc5386..ad7b1bd 100644
73 --- a/viewadsb.c
74 +++ b/viewadsb.c
75 @@ -308,7 +308,10 @@ int main(int argc, char **argv) {
76 }
77 // Free local service and client
78 if (s) free(s);
79 - freeaddrinfo(con->addr_info);
80 + if (con->addr_info) {
81 + freeaddrinfo(con->addr_info);
82 + con->addr_info = NULL;
83 + }
84 pthread_mutex_unlock(con->mutex);
85 pthread_mutex_destroy(con->mutex);
86 free(con->mutex);
87 --
88 2.26.2
89