[Dnsmasq-discuss] [PATCH] Fix syscall param, sendmsg(msg.msg_control) pointing to uninitialised bytes
Geert Stappers
stappers at stappers.nl
Sat Aug 17 17:56:19 UTC 2024
On Sat, Jul 27, 2024 at 11:25:04AM +0200, Dominik Derigs via Dnsmasq-discuss wrote:
> Hey Simon,
Hello dnsmasq mailinglist,
Hello people in the CC,
> another patch fixing a small memcheck error reported during Pi-hole testing.
> The error is caused in send_from() (forward.c) by handing a partially
> uninitialized stack variable to sendmsg() when nowild == false.
>
> Full error output (example):
>
> ==1052839== Syscall param sendmsg(msg.msg_control) points to uninitialised byte(s)
> ==1052839== at 0x4B7199D: __libc_sendmsg (sendmsg.c:28)
> ==1052839== by 0x4B7199D: sendmsg (sendmsg.c:25)
> ==1052839== by 0x21EADB: send_from (forward.c:101)
> ==1052839== by 0x222551: receive_query (forward.c:1988)
> ==1052839== by 0x20FD6A: check_dns_listeners (dnsmasq.c:1886)
> ==1052839== by 0x2120EF: main (dnsmasq.c:1278)
> ==1052839== Location 0x1fff000098is 24bytes inside local var "control_u"
> ==1052839== declared at forward.c:49, in frame #1of thread 1
> ==1052839== Uninitialised value was created by a stack allocation
> ==1052839== at 0x21EA11: send_from (forward.c:38)
>
> Note that the line-numbers are not necessarily 100% accurate. We have not
> noticed any abnormal behavior, however, fixing this reported error is easy
> enough.
>
> Best,
> Dominik
> From fd37817ec8ae02c8c4d449df339d179f767caba4 Mon Sep 17 00:00:00 2001
> From: Dominik Derigs <dl6er at dl6er.de>
> Date: Sat, 27 Jul 2024 11:13:49 +0200
> Subject: [PATCH] Fix memcheck errors like "Syscall param sendmsg(msg.msg_control) points to uninitialised byte(s)"
>
> Signed-off-by: Dominik Derigs <dl6er at dl6er.de>
> ---
> src/forward.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/src/forward.c b/src/forward.c
> index 10e7496..004935e 100644
> --- a/src/forward.c
> +++ b/src/forward.c
> @@ -35,7 +35,7 @@ int send_from(int fd, int nowild, char *packet, size_t len,
> union mysockaddr *to, union all_addr *source,
> unsigned int iface)
> {
> - struct msghdr msg;
> + struct msghdr msg = { 0 };
> struct iovec iov[1];
> union {
> struct cmsghdr align; /* this ensures alignment */
> @@ -45,7 +45,7 @@ int send_from(int fd, int nowild, char *packet, size_t len,
> char control[CMSG_SPACE(sizeof(struct in_addr))];
> #endif
> char control6[CMSG_SPACE(sizeof(struct in6_pktinfo))];
> - } control_u;
> + } control_u = { 0 };
>
> iov[0].iov_base = packet;
> iov[0].iov_len = len;
> --
> 2.34.1
>
Groeten
Geert Stappers
--
Silence is hard to parse
More information about the Dnsmasq-discuss
mailing list