blob: a389475c89efea075d3b16bb1a33a5632070baf7 [file] [log] [blame]
b.liue9582032025-04-17 19:18:16 +08001From 82014a5fa9930b0875e57869265acf011772277c Mon Sep 17 00:00:00 2001
2From: Stijn Tintel <stijn@linux-ipv6.be>
3Date: Sun, 3 May 2020 20:56:58 +0300
4Subject: [PATCH] network: avoid segfault in freeaddrinfo
5
6Calling freeaddrinfo(NULL) when using musl libc causes a segfault.
7
8Signed-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--- a/anet.c
16+++ b/anet.c
17@@ -212,7 +212,10 @@ static int anetTcpGenericConnect(char *e
18 if (ss) {
19 memcpy(ss, p->ai_addr, sizeof(*ss));
20 }
21- freeaddrinfo(gai_result);
22+ if (gai_result) {
23+ freeaddrinfo(gai_result);
24+ gai_result = NULL;
25+ }
26 return s;
27 }
28
29@@ -220,7 +223,10 @@ static int anetTcpGenericConnect(char *e
30 anetCloseSocket(s);
31 }
32
33- freeaddrinfo(gai_result);
34+ if (gai_result) {
35+ freeaddrinfo(gai_result);
36+ gai_result = NULL;
37+ }
38 return ANET_ERR;
39 }
40
41@@ -368,7 +374,10 @@ int anetTcpServer(char *err, char *servi
42 fds[i++] = s;
43 }
44
45- freeaddrinfo(gai_result);
46+ if (gai_result) {
47+ freeaddrinfo(gai_result);
48+ gai_result = NULL;
49+ }
50 return (i > 0 ? i : ANET_ERR);
51 }
52
53--- a/net_io.c
54+++ b/net_io.c
55@@ -3285,7 +3285,10 @@ void cleanupNetwork(void) {
56 for (int i = 0; i < Modes.net_connectors_count; i++) {
57 struct net_connector *con = Modes.net_connectors[i];
58 free(con->address);
59- freeaddrinfo(con->addr_info);
60+ if (con->addr_info) {
61+ freeaddrinfo(con->addr_info);
62+ con->addr_info = NULL;
63+ }
64 if (con->mutex) {
65 pthread_mutex_unlock(con->mutex);
66 pthread_mutex_destroy(con->mutex);
67--- a/viewadsb.c
68+++ b/viewadsb.c
69@@ -308,7 +308,10 @@ int main(int argc, char **argv) {
70 }
71 // Free local service and client
72 if (s) free(s);
73- freeaddrinfo(con->addr_info);
74+ if (con->addr_info) {
75+ freeaddrinfo(con->addr_info);
76+ con->addr_info = NULL;
77+ }
78 pthread_mutex_unlock(con->mutex);
79 pthread_mutex_destroy(con->mutex);
80 free(con->mutex);