]> git.ipfire.org Git - thirdparty/openvpn.git/blobdiff - src/openvpn/socket.c
Fix various 'Uninitialized scalar variable' warnings from Coverity
[thirdparty/openvpn.git] / src / openvpn / socket.c
index 216f2ad7696fa4a6ec8f4489cdca63acf3f568da..480f4e51c7eea6062b45a92f80ccbbfa49a5902a 100644 (file)
@@ -23,8 +23,6 @@
 
 #ifdef HAVE_CONFIG_H
 #include "config.h"
-#elif defined(_MSC_VER)
-#include "config-msvc.h"
 #endif
 
 #include "syshead.h"
@@ -567,12 +565,11 @@ openvpn_getaddrinfo(unsigned int flags,
                 if (sig_info->signal_received) /* were we interrupted by a signal? */
                 {
                     /* why are we overwriting SIGUSR1 ? */
-                    if (sig_info->signal_received == SIGUSR1) /* ignore SIGUSR1 */
+                    if (signal_reset(sig_info, SIGUSR1) == SIGUSR1) /* ignore SIGUSR1 */
                     {
                         msg(level,
                             "RESOLVE: Ignored SIGUSR1 signal received during "
                             "DNS resolution attempt");
-                        signal_reset(sig_info);
                     }
                     else
                     {
@@ -957,7 +954,8 @@ socket_set_mark(socket_descriptor_t sd, int mark)
 static bool
 socket_set_flags(socket_descriptor_t sd, unsigned int sockflags)
 {
-    if (sockflags & SF_TCP_NODELAY)
+    /* SF_TCP_NODELAY doesn't make sense for dco-win */
+    if ((sockflags & SF_TCP_NODELAY) && (!(sockflags & SF_DCO_WIN)))
     {
         return socket_set_tcp_nodelay(sd, 1);
     }
@@ -972,7 +970,8 @@ link_socket_update_flags(struct link_socket *ls, unsigned int sockflags)
 {
     if (ls && socket_defined(ls->sd))
     {
-        return socket_set_flags(ls->sd, ls->sockflags = sockflags);
+        ls->sockflags |= sockflags;
+        return socket_set_flags(ls->sd, ls->sockflags);
     }
     else
     {
@@ -1163,7 +1162,7 @@ protect_fd_nonlocal(int fd, const struct sockaddr *addr)
 {
     if (!management)
     {
-        msg(M_FATAL, "Required management interface not available.")
+        msg(M_FATAL, "Required management interface not available.");
     }
 
     /* pass socket FD to management interface to pass on to VPNService API
@@ -1593,7 +1592,6 @@ socket_connect(socket_descriptor_t *sd,
         openvpn_close_socket(*sd);
         *sd = SOCKET_UNDEFINED;
         register_signal(sig_info, SIGUSR1, "connection-failed");
-        sig_info->source = SIG_SOURCE_CONNECTION_FAILED;
     }
     else
     {
@@ -2180,7 +2178,7 @@ link_socket_init_phase2(struct context *c)
     if (sig_info->signal_received)
     {
         sig_save = *sig_info;
-        signal_reset(sig_info);
+        sig_save.signal_received = signal_reset(sig_info, 0);
     }
 
     /* initialize buffers */
@@ -2903,16 +2901,16 @@ const char *
 print_in_addr_t(in_addr_t addr, unsigned int flags, struct gc_arena *gc)
 {
     struct in_addr ia;
-    struct buffer out = alloc_buf_gc(64, gc);
+    char *out = gc_malloc(INET_ADDRSTRLEN, true, gc);
 
     if (addr || !(flags & IA_EMPTY_IF_UNDEF))
     {
         CLEAR(ia);
         ia.s_addr = (flags & IA_NET_ORDER) ? addr : htonl(addr);
 
-        buf_printf(&out, "%s", inet_ntoa(ia));
+        inet_ntop(AF_INET, &ia, out, INET_ADDRSTRLEN);
     }
-    return BSTR(&out);
+    return out;
 }
 
 /*
@@ -2922,16 +2920,14 @@ print_in_addr_t(in_addr_t addr, unsigned int flags, struct gc_arena *gc)
 const char *
 print_in6_addr(struct in6_addr a6, unsigned int flags, struct gc_arena *gc)
 {
-    struct buffer out = alloc_buf_gc(64, gc);
-    char tmp_out_buf[64];       /* inet_ntop wants pointer to buffer */
+    char *out = gc_malloc(INET6_ADDRSTRLEN, true, gc);
 
     if (memcmp(&a6, &in6addr_any, sizeof(a6)) != 0
         || !(flags & IA_EMPTY_IF_UNDEF))
     {
-        inet_ntop(AF_INET6, &a6, tmp_out_buf, sizeof(tmp_out_buf)-1);
-        buf_printf(&out, "%s", tmp_out_buf );
+        inet_ntop(AF_INET6, &a6, out, INET6_ADDRSTRLEN);
     }
-    return BSTR(&out);
+    return out;
 }
 
 /*
@@ -2980,7 +2976,7 @@ setenv_sockaddr(struct env_set *es, const char *name_prefix, const struct openvp
 {
     char name_buf[256];
 
-    char buf[128];
+    char buf[INET6_ADDRSTRLEN];
     switch (addr->addr.sa.sa_family)
     {
         case AF_INET:
@@ -2993,7 +2989,8 @@ setenv_sockaddr(struct env_set *es, const char *name_prefix, const struct openvp
                 openvpn_snprintf(name_buf, sizeof(name_buf), "%s", name_prefix);
             }
 
-            setenv_str(es, name_buf, inet_ntoa(addr->addr.in4.sin_addr));
+            inet_ntop(AF_INET, &addr->addr.in4.sin_addr, buf, sizeof(buf));
+            setenv_str(es, name_buf, buf);
 
             if ((flags & SA_IP_PORT) && addr->addr.in4.sin_port)
             {
@@ -3009,13 +3006,12 @@ setenv_sockaddr(struct env_set *es, const char *name_prefix, const struct openvp
                 memcpy(&ia.s_addr, &addr->addr.in6.sin6_addr.s6_addr[12],
                        sizeof(ia.s_addr));
                 openvpn_snprintf(name_buf, sizeof(name_buf), "%s_ip", name_prefix);
-                openvpn_snprintf(buf, sizeof(buf), "%s", inet_ntoa(ia) );
+                inet_ntop(AF_INET, &ia, buf, sizeof(buf));
             }
             else
             {
                 openvpn_snprintf(name_buf, sizeof(name_buf), "%s_ip6", name_prefix);
-                getnameinfo(&addr->addr.sa, sizeof(struct sockaddr_in6),
-                            buf, sizeof(buf), NULL, 0, NI_NUMERICHOST);
+                inet_ntop(AF_INET6, &addr->addr.in6.sin6_addr, buf, sizeof(buf));
             }
             setenv_str(es, name_buf, buf);
 
@@ -3302,7 +3298,7 @@ link_socket_read_udp_posix_recvmsg(struct link_socket *sock,
 {
     struct iovec iov;
     uint8_t pktinfo_buf[PKTINFO_BUF_SIZE];
-    struct msghdr mesg;
+    struct msghdr mesg = {0};
     socklen_t fromlen = sizeof(from->dest.addr);
 
     ASSERT(sock->sd >= 0);                      /* can't happen */