diff --git a/src/openvpn/buffer.h b/src/openvpn/buffer.h
index 2461a20703aa..0f10bf00399e 100644
--- a/src/openvpn/buffer.h
+++ b/src/openvpn/buffer.h
@@ -214,7 +214,11 @@ bool buf_init_debug(struct buffer *buf, int offset, const char *file, int line);
 static inline void
 gc_freeaddrinfo_callback(void *addr)
 {
-    freeaddrinfo((struct addrinfo *) addr);
+    /* WARNING: musl libc needs valid pointer */
+    if (addr)
+    {
+        freeaddrinfo((struct addrinfo *) addr);
+    }
 }
 
 /** Return an empty struct buffer */
diff --git a/src/openvpn/dns.c b/src/openvpn/dns.c
index 9f2a7d5ecaf8..05b87e983272 100644
--- a/src/openvpn/dns.c
+++ b/src/openvpn/dns.c
@@ -130,7 +130,12 @@ dns_server_addr_parse(struct dns_server *server, const char *addr)
         server->port6 = port;
     }
 
-    freeaddrinfo(ai);
+    /* WARNING: musl libc needs valid pointer */
+    if (ai)
+    {
+        freeaddrinfo(ai);
+    }
+
     return true;
 }
 
diff --git a/src/openvpn/ps.c b/src/openvpn/ps.c
index 3609630af779..59f535bf2494 100644
--- a/src/openvpn/ps.c
+++ b/src/openvpn/ps.c
@@ -841,7 +841,12 @@ port_share_open(const char *host,
                                  host, port,  0, NULL, AF_INET, &ai);
     ASSERT(status==0);
     hostaddr = *((struct sockaddr_in *) ai->ai_addr);
-    freeaddrinfo(ai);
+
+    /* WARNING: musl libc needs valid pointer */
+    if (ai)
+    {
+        freeaddrinfo(ai);
+    }
 
     /*
      * Make a socket for foreground and background processes
diff --git a/src/openvpn/socket.c b/src/openvpn/socket.c
index a883ac4a156c..9f6442698ed1 100644
--- a/src/openvpn/socket.c
+++ b/src/openvpn/socket.c
@@ -172,7 +172,11 @@ get_addr_generic(sa_family_t af, unsigned int flags, const char *hostname,
         *sep = '/';
     }
 out:
-    freeaddrinfo(ai);
+    /* WARNING: musl libc needs valid pointer */
+    if (ai)
+    {
+        freeaddrinfo(ai);
+    }
     free(var_host);
 
     return ret;
@@ -1347,10 +1351,12 @@ socket_listen_accept(socket_descriptor_t sd,
                 {
                     msg(M_ERR, "TCP: close socket failed (new_sd)");
                 }
+                /* WARNING: musl libc needs valid pointer */
                 freeaddrinfo(ai);
             }
             else
             {
+                /* WARNING: musl libc needs valid pointer */
                 if (ai)
                 {
                     freeaddrinfo(ai);
