Redo fix for CID 979581

The previous change was flawed in terms of how it calculated the
buffer length for the sockaddr_un object. Use SUN_LEN where
appropriate and mute the Coverity complaint by using memset(.., 0, ..)
to zero out the entire structure instead of setting .sun_len to a bogus
value and strlcpy'ing in the contents of argv[1].

SUN_LEN is now being passed to bind(2) as well. For some odd reason
this wasn't flagged as a bug with Coverity.

Reported by:	jilles, jmallett
MFC after:	2 days
X-MFC with:	r311233
This commit is contained in:
Enji Cooper 2017-01-05 07:46:57 +00:00
parent 4747f0df83
commit 20a4ce8bf2
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=311377

View File

@ -244,13 +244,15 @@ sockets_main(int argc, char **argv)
}
#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));
memset(&addr, 0, sizeof(addr));
#endif
(void)strlcpy(addr.sun_path, argv[1], sizeof(addr.sun_path));
addr.sun_family = PF_UNIX;
#ifdef __FreeBSD__
error = bind(fd, (struct sockaddr *)&addr, SUN_LEN(&addr));
#else
error = bind(fd, (struct sockaddr *)&addr, sizeof(addr));
#endif
if (error == -1) {
warn("connect");
#ifdef __FreeBSD__