]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MINOR: dev/udp: properly preset the rx address size
authorWilly Tarreau <w@1wt.eu>
Wed, 31 Aug 2022 06:55:12 +0000 (08:55 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 31 Aug 2022 08:39:09 +0000 (10:39 +0200)
addrlen was not preset to sizeof(addr) on rx, resulting in the address
often not being filled and response packets not always flowing back.

Let's also consistently use "addr" in the bind call (it points to
frt_addr there but it's a bit confusing).

dev/udp/udp-perturb.c

index 098e61c2c2b92b2443f9e2e90920625c6a54be31..ca8c0dcd8450ba58a434259da754ee13e4532820 100644 (file)
@@ -193,7 +193,7 @@ int create_udp_listener(struct sockaddr_storage *addr, struct errmsg *err)
                goto fail;
        }
 #endif
-       if (bind(fd, (struct sockaddr *)&frt_addr, addr->ss_family == AF_INET6 ?
+       if (bind(fd, (struct sockaddr *)addr, addr->ss_family == AF_INET6 ?
                 sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in)) == -1) {
                err->len = snprintf(err->msg, err->size, "bind(): '%s'", strerror(errno));
                goto fail;
@@ -297,6 +297,7 @@ int handle_frt(int fd, struct pollfd *pfd, struct conn *conns, int nbconn)
                pktbuf = history[history_idx].buf;
        }
 
+       addrlen = sizeof(addr);
        ret = recvfrom(fd, pktbuf, MAXPKTSIZE, MSG_DONTWAIT | MSG_NOSIGNAL,
                       (struct sockaddr *)&addr, &addrlen);