From: Willy Tarreau Date: Wed, 31 Aug 2022 06:55:12 +0000 (+0200) Subject: BUG/MINOR: dev/udp: properly preset the rx address size X-Git-Tag: v2.7-dev5~33 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=3ff96103569d911f264563207d1825ad5b6d5616;p=thirdparty%2Fhaproxy.git BUG/MINOR: dev/udp: properly preset the rx address size 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). --- diff --git a/dev/udp/udp-perturb.c b/dev/udp/udp-perturb.c index 098e61c2c2..ca8c0dcd84 100644 --- a/dev/udp/udp-perturb.c +++ b/dev/udp/udp-perturb.c @@ -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);