]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
selftest/net/ovpn: fix crash in case of getaddrinfo() failure
authorAntonio Quartulli <antonio@openvpn.net>
Tue, 6 May 2025 12:56:54 +0000 (14:56 +0200)
committerAntonio Quartulli <antonio@openvpn.net>
Thu, 15 May 2025 11:09:36 +0000 (13:09 +0200)
getaddrinfo() may fail with error code different from EAI_FAIL
or EAI_NONAME, however in this case we still try to free the
results object, thus leading to a crash.

Fix this by bailing out on any possible error.

Fixes: 959bc330a439 ("testing/selftests: add test tool and scripts for ovpn module")
Signed-off-by: Antonio Quartulli <antonio@openvpn.net>
tools/testing/selftests/net/ovpn/ovpn-cli.c

index 69e41fc07fbcaf7bf60df6584a97d097b268f808..c6372a1b4728c0b9bb5266aa910ad1a0b8975579 100644 (file)
@@ -1753,8 +1753,11 @@ static int ovpn_parse_remote(struct ovpn_ctx *ovpn, const char *host,
 
        if (host) {
                ret = getaddrinfo(host, service, &hints, &result);
-               if (ret == EAI_NONAME || ret == EAI_FAIL)
+               if (ret) {
+                       fprintf(stderr, "getaddrinfo on remote error: %s\n",
+                               gai_strerror(ret));
                        return -1;
+               }
 
                if (!(result->ai_family == AF_INET &&
                      result->ai_addrlen == sizeof(struct sockaddr_in)) &&
@@ -1769,8 +1772,11 @@ static int ovpn_parse_remote(struct ovpn_ctx *ovpn, const char *host,
 
        if (vpnip) {
                ret = getaddrinfo(vpnip, NULL, &hints, &result);
-               if (ret == EAI_NONAME || ret == EAI_FAIL)
+               if (ret) {
+                       fprintf(stderr, "getaddrinfo on vpnip error: %s\n",
+                               gai_strerror(ret));
                        return -1;
+               }
 
                if (!(result->ai_family == AF_INET &&
                      result->ai_addrlen == sizeof(struct sockaddr_in)) &&