]> git.ipfire.org Git - thirdparty/openvpn.git/commitdiff
Fix crash when using --inetd.
authorGert Doering <gert@greenie.muc.de>
Sun, 30 Mar 2014 12:09:36 +0000 (14:09 +0200)
committerGert Doering <gert@greenie.muc.de>
Sun, 30 Mar 2014 13:35:29 +0000 (15:35 +0200)
Change "local" argument to socket_do_listen() to avoid calling
"local->ai_addr" in the caller for the "do_listen == FALSE" case,
in which case it could be NULL.

Also, ensure "ai" is always initialized in socket_listen_accept() for
the "!remote_dynamic" case - otherwise it will sometimes(!) crash in
addrlist_match() later on.

Get rid of spurious operator precedence warning concerning
GETADDR_CACHE_MASK.

Signed-off-by: Gert Doering <gert@greenie.muc.de>
Acked-by: Arne Schwabe <arne@rfc2549.org>
Message-Id: <1396181376-32022-1-git-send-email-gert@greenie.muc.de>
URL: http://article.gmane.org/gmane.network.openvpn.devel/8412

src/openvpn/socket.c
src/openvpn/socket.h

index b769171c282f00c3be9e68010230888b92cce8fa..7deef0ad5d3075907b5db28ff84dfcf87d611145 100644 (file)
@@ -917,15 +917,16 @@ static void protect_fd_nonlocal (int fd, const struct sockaddr* addr)
  */
 static void
 socket_do_listen (socket_descriptor_t sd,
-                 const struct sockaddr *local,
+                 const struct addrinfo *local,
                  bool do_listen,
                  bool do_set_nonblock)
 {
   struct gc_arena gc = gc_new ();
   if (do_listen)
     {
+      ASSERT(local);
       msg (M_INFO, "Listening for incoming TCP connection on %s", 
-          print_sockaddr (local, &gc));
+          print_sockaddr (local->ai_addr, &gc));
       if (listen (sd, 1))
        msg (M_ERR, "TCP: listen() failed");
     }
@@ -1018,7 +1019,7 @@ socket_listen_accept (socket_descriptor_t sd,
   int new_sd = SOCKET_UNDEFINED;
 
   CLEAR (*act);
-  socket_do_listen (sd, local->ai_addr, do_listen, true);
+  socket_do_listen (sd, local, do_listen, true);
 
   while (true)
     {
@@ -1053,7 +1054,7 @@ socket_listen_accept (socket_descriptor_t sd,
 
       if (socket_defined (new_sd))
        {
-          struct addrinfo* ai;
+          struct addrinfo* ai = NULL;
           if(remote_dynamic)
               openvpn_getaddrinfo(0, remote_dynamic, NULL, 1, NULL,
                                     remote_verify.addr.sa.sa_family, &ai);
@@ -1775,7 +1776,7 @@ phase2_tcp_server (struct link_socket *sock, const char *remote_dynamic,
       break;
     case LS_MODE_TCP_LISTEN:
       socket_do_listen (sock->sd,
-                       sock->info.lsa->bind_local->ai_addr,
+                       sock->info.lsa->bind_local,
                        true,
                        false);
       break;
index f27e9a9a6b585cb5a21f098c82efc561371f6c80..bffa0390cacec189668fddff2521ca141db5e219 100644 (file)
@@ -524,7 +524,7 @@ bool unix_socket_get_peer_uid_gid (const socket_descriptor_t sd, int *uid, int *
 #define GETADDR_PASSIVE               (1<<10)
 #define GETADDR_DATAGRAM              (1<<11)
 
-#define GETADDR_CACHE_MASK             GETADDR_DATAGRAM|GETADDR_PASSIVE
+#define GETADDR_CACHE_MASK             (GETADDR_DATAGRAM|GETADDR_PASSIVE)
 
 in_addr_t getaddr (unsigned int flags,
                   const char *hostname,