Segfault in nbd-server.c due to calling freeaddrinfo on NULL
authorKevin Daudt <unknown@unknown>
Thu, 23 May 2019 07:08:27 +0000 (09:08 +0200)
committerWouter Verhelst <w@uter.be>
Thu, 23 May 2019 07:08:27 +0000 (09:08 +0200)
In set_peername, when netaddr.ss_family == AF_UNIX. ai is never initialized.

On line 1733, freeaddrinfo is called unconditionally on ai, which might be NULL
in some cases.

The musl implementation of getaddrinfo started to segfault when you pass it
NULL. This caused some of the tests to fail on Alpine Linux, namely simple_test
inetd and unix.

This patch was enough to fix the issue

nbd-server.c

index 2600d8b..7f8d719 100644 (file)
@@ -1730,7 +1730,9 @@ int set_peername(int net, CLIENT *client) {
                        break;
        }
 
-       freeaddrinfo(ai);
+       if(ai) {
+               freeaddrinfo(ai);
+       }
         msg(LOG_INFO, "connect from %s, assigned file is %s",
             peername, client->exportname);
        client->clientname=g_strdup(peername);