CLEANUP: protocol: intitialize all of the sockaddr when disconnecting
authorWilly Tarreau <w@1wt.eu>
Wed, 14 Oct 2020 08:50:41 +0000 (10:50 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 14 Oct 2020 08:54:15 +0000 (10:54 +0200)
In issue #894, Coverity suspects uninitialized values for a socket's
address whose family is AF_UNSPEC but it doesn't know that the address
is not used in this case. It's not on a critical path and working around
it is trivial, let's fully declare the address. We're doing it for both
TCP and UDP, because the same principle appears at two places.

src/proto_tcp.c
src/proto_udp.c

index 2b5367b..be9a25a 100644 (file)
@@ -769,10 +769,9 @@ static void tcp_disable_listener(struct listener *l)
  */
 static int tcp_suspend_receiver(struct receiver *rx)
 {
-       struct sockaddr sa;
+       const struct sockaddr sa = { .sa_family = AF_UNSPEC };
        int ret;
 
-       sa.sa_family = AF_UNSPEC;
        if (connect(rx->fd, &sa, sizeof(sa)) < 0)
                goto check_already_done;
 
index 13545ad..bebcfb3 100644 (file)
@@ -225,14 +225,12 @@ static int udp_suspend_receiver(struct receiver *rx)
  */
 static int udp_resume_receiver(struct receiver *rx)
 {
-       struct sockaddr sa;
-       socklen_t len = sizeof(sa);
+       const struct sockaddr sa = { .sa_family = AF_UNSPEC };
 
        if (rx->fd < 0)
                return 0;
 
-       sa.sa_family = AF_UNSPEC;
-       if (connect(rx->fd, &sa, len) < 0)
+       if (connect(rx->fd, &sa, sizeof(sa)) < 0)
                return -1;
 
        fd_want_recv(rx->fd);