Fix use-after-free of numeric IPv6 hostname on error path
authorDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 26 Sep 2012 19:42:10 +0000 (20:42 +0100)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Wed, 26 Sep 2012 19:42:49 +0000 (20:42 +0100)
Spotted by Coverity.

Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
ssl.c

diff --git a/ssl.c b/ssl.c
index c5115e7..e9916fb 100644 (file)
--- a/ssl.c
+++ b/ssl.c
@@ -205,15 +205,17 @@ int connect_https_socket(struct openconnect_info *vpninfo)
                }
 
                err = getaddrinfo(hostname, port, &hints, &result);
-               if (hints.ai_flags & AI_NUMERICHOST)
-                       free(hostname);
 
                if (err) {
                        vpn_progress(vpninfo, PRG_ERR,
                                     _("getaddrinfo failed for host '%s': %s\n"),
                                     hostname, gai_strerror(err));
+                       if (hints.ai_flags & AI_NUMERICHOST)
+                               free(hostname);
                        return -EINVAL;
                }
+               if (hints.ai_flags & AI_NUMERICHOST)
+                       free(hostname);
 
                for (rp = result; rp ; rp = rp->ai_next) {
                        char host[80];