lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20240927140645.02515695@hermes.local>
Date: Fri, 27 Sep 2024 14:06:45 -0700
From: Stephen Hemminger <stephen@...workplumber.org>
To: Dario Binacchi <dario.binacchi@...rulasolutions.com>
Cc: netdev@...r.kernel.org, linux-amarula@...rulasolutions.com
Subject: Re: [iproute2, RESEND PATCH 1/2] arpd: use designated initializers
 for msghdr structure

On Sun, 22 Sep 2024 16:46:12 +0200
Dario Binacchi <dario.binacchi@...rulasolutions.com> wrote:

> This patch fixes the following error:
> 
> arpd.c:442:17: error: initialization of 'int' from 'void *' makes integer from pointer without a cast [-Wint-conversion]
>   442 |                 NULL,   0,
> 
> raised by Buildroot autobuilder [1].
> 
> In the case in question, the analysis of socket.h [2] containing the
> msghdr structure shows that it has been modified with the addition of
> padding fields, which cause the compilation error. The use of designated
> initializers allows the issue to be fixed.
> 
> struct msghdr {
> 	void *msg_name;
> 	socklen_t msg_namelen;
> 	struct iovec *msg_iov;
> #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __BIG_ENDIAN
> 	int __pad1;
> #endif
> 	int msg_iovlen;
> #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __LITTLE_ENDIAN
> 	int __pad1;
> #endif
> 	void *msg_control;
> #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __BIG_ENDIAN
> 	int __pad2;
> #endif
> 	socklen_t msg_controllen;
> #if __LONG_MAX > 0x7fffffff && __BYTE_ORDER == __LITTLE_ENDIAN
> 	int __pad2;
> #endif
> 	int msg_flags;
> };

That is a really bad idea to put extra padding in there.

> 
> [1] http://autobuild.buildroot.org/results/e4cdfa38ae9578992f1c0ff5c4edae3cc0836e3c/
> [2] iproute2/host/mips64-buildroot-linux-musl/sysroot/usr/include/sys/socket.h
> 
> Signed-off-by: Dario Binacchi <dario.binacchi@...rulasolutions.com>
> ---
>  misc/arpd.c | 8 ++++----
>  1 file changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/misc/arpd.c b/misc/arpd.c
> index e77ef53928a2..b4935c23eebb 100644
> --- a/misc/arpd.c
> +++ b/misc/arpd.c
> @@ -437,10 +437,10 @@ static void get_kern_msg(void)
>  	struct iovec iov;
>  	char   buf[8192];
>  	struct msghdr msg = {
> -		(void *)&nladdr, sizeof(nladdr),
> -		&iov,	1,
> -		NULL,	0,
> -		0
> +		.msg_name = &nladdr, .msg_namelen = sizeof(nladdr),

When converting, to named initializer, please put one per line
like other code does in iproute.

> +		.msg_iov = &iov, .msg_iovlen = 1,
> +		.msg_control = (void *)NULL, .msg_controllen = 0,

The C standard says that NULL can be used for void *, cast there 
is unnecessary.

> +		.msg_flags = 0
>  	};
>  
>  	iov.iov_base = buf;


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ