Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 5 Jan 2017 00:36:50 +0100
From:      Jilles Tjoelker <jilles@stack.nl>
To:        Ngie Cooper <ngie@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r311233 - head/contrib/netbsd-tests/fs/tmpfs
Message-ID:  <20170104233650.GB17765@stack.nl>
In-Reply-To: <201701040246.v042kaEh039041@repo.freebsd.org>
References:  <201701040246.v042kaEh039041@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Wed, Jan 04, 2017 at 02:46:36AM +0000, Ngie Cooper wrote:
> Author: ngie
> Date: Wed Jan  4 02:46:36 2017
> New Revision: 311233
> URL: https://svnweb.freebsd.org/changeset/base/311233

> Log:
>   Fix Coverity issues

>   - Initialize .sun_len before passing it to strlcpy and bind.
>   - Close fd on error

>   MFC after:	3 days
>   Reported by:	Coverity
>   CID:		978283, 979581

> Modified:
>   head/contrib/netbsd-tests/fs/tmpfs/h_tools.c

> Modified: head/contrib/netbsd-tests/fs/tmpfs/h_tools.c
> ==============================================================================
> --- head/contrib/netbsd-tests/fs/tmpfs/h_tools.c	Wed Jan  4 02:43:33 2017	(r311232)
> +++ head/contrib/netbsd-tests/fs/tmpfs/h_tools.c	Wed Jan  4 02:46:36 2017	(r311233)
> @@ -243,12 +243,19 @@ sockets_main(int argc, char **argv)
>  		return EXIT_FAILURE;
>  	}
>  
> +#ifdef	__FreeBSD__
> +	addr.sun_len = sizeof(addr.sun_path);
> +	(void)strlcpy(addr.sun_path, argv[1], addr.sun_len);
> +#else
>  	(void)strlcpy(addr.sun_path, argv[1], sizeof(addr.sun_path));
> +#endif
>  	addr.sun_family = PF_UNIX;
> -
>  	error = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
>  	if (error == -1) {
>  		warn("connect");
> +#ifdef	__FreeBSD__
> +		(void)close(fd);
> +#endif
>  		return EXIT_FAILURE;
>  	}
>  

It would be better to avoid naming the non-portable sun_len field if it
is just to make Coverity happy. I suggest initializing the structure
with designated initializers or memset().

Apart from that, the value for sun_len is wrong; it should be the length
of the whole structure and not just the sun_path part. Fortunately, the
field is ignored by bind(), which uses the addrlen parameter instead.

On a more general note, refactoring tests without a way to verify they
have not been changed to always pass is risky :(

-- 
Jilles Tjoelker



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20170104233650.GB17765>