Hi, comments inline.
> --- > interface.c | 22 ++++++++-------------- > 1 file changed, 8 insertions(+), 14 deletions(-) > > diff --git a/interface.c b/interface.c > index 7f814d2..18dee52 100644 > --- a/interface.c > +++ b/interface.c > @@ -44,7 +44,7 @@ > static int > interface_send_packet4(struct interface *iface, struct sockaddr_in *to, > struct iovec *iov, int iov_len) > { > - static size_t cmsg_data[( CMSG_SPACE(sizeof(struct in_pktinfo)) / > sizeof(size_t)) + 1]; > + static size_t cmsg_data[( CMSG_SPACE(sizeof(struct in_pktinfo)) / > sizeof(size_t)) + 1] = {}; > static struct sockaddr_in a; > static struct msghdr m = { > .msg_name = (struct sockaddr *) &a, > @@ -61,7 +61,6 @@ interface_send_packet4(struct interface *iface, struct > sockaddr_in *to, struct i > m.msg_iov = iov; > m.msg_iovlen = iov_len; > > - memset(cmsg_data, 0, sizeof(cmsg_data)); The cmsg_data buffer is static, wouldn't that mean that it is never zeroed again after the first function call? > cmsg = CMSG_FIRSTHDR(&m); > cmsg->cmsg_len = m.msg_controllen; > cmsg->cmsg_level = IPPROTO_IP; > @@ -84,7 +83,7 @@ interface_send_packet4(struct interface *iface, struct > sockaddr_in *to, struct i > static int > interface_send_packet6(struct interface *iface, struct sockaddr_in6 *to, > struct iovec *iov, int iov_len) > { > - static size_t cmsg_data[( CMSG_SPACE(sizeof(struct in6_pktinfo)) / > sizeof(size_t)) + 1]; > + static size_t cmsg_data[( CMSG_SPACE(sizeof(struct in6_pktinfo)) / > sizeof(size_t)) + 1] = {}; > static struct sockaddr_in6 a; > static struct msghdr m = { > .msg_name = (struct sockaddr *) &a, > @@ -101,7 +100,6 @@ interface_send_packet6(struct interface *iface, struct > sockaddr_in6 *to, struct > m.msg_iov = iov; > m.msg_iovlen = iov_len; > > - memset(cmsg_data, 0, sizeof(cmsg_data)); Same here, I think the buffer needs to be zeroed on each invocation. > cmsg = CMSG_FIRSTHDR(&m); > cmsg->cmsg_len = m.msg_controllen; > cmsg->cmsg_level = IPPROTO_IPV6; > @@ -186,7 +184,7 @@ read_socket4(struct uloop_fd *u, unsigned int events) > struct iovec iov[1]; > char cmsg[CMSG_SPACE(sizeof(struct in_pktinfo)) + > CMSG_SPACE(sizeof(int)) + 1]; > struct cmsghdr *cmsgptr; > - struct msghdr msg; > + struct msghdr msg = {}; > socklen_t len; [snip] ~ Jo _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev