Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 22 Dec 2015 23:02:12 +0000 (UTC)
From:      Garrett Cooper <ngie@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r292631 - in user/ngie/stable-10-libnv: contrib/mdocml etc/mtree lib lib/libnv lib/libnv/tests share/mk
Message-ID:  <201512222302.tBMN2C5E088242@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ngie
Date: Tue Dec 22 23:02:12 2015
New Revision: 292631
URL: https://svnweb.freebsd.org/changeset/base/292631

Log:
  MFC r258065,r258594,r259430,r260222,r261407,r261408,r263479,r264021,r266351,r269603:
  
  r258065 (by pjd):
  
  Bring in libnv library for managing name/value pairs. The following types
  are currently supported:
  
  - NV_TYPE_NULL - only name, no data;
  - NV_TYPE_BOOL - boolean (true or false);
  - NV_TYPE_NUMBER - 64bit unsigned integer;
  - NV_TYPE_STRING - C string;
  - NV_TYPE_NVLIST - nested nvlist;
  - NV_TYPE_DESCRIPTOR - file descriptor;
  - NV_TYPE_BINARY - binary data.
  
  For detailed documentation and examples see nv(3) manual page.
  
  Sponsored by:	The FreeBSD Foundation
  
  r258594 (by pjd):
  
  Fix double free().
  
  Reported by:	Coverity
  Coverity CID:	1130048
  
  r259430 (by pjd):
  
  MFp4 @1189139:
  
  Get rid of the msg_peek() function, which has a problem.  If there was less
  data in the socket buffer than requested by the caller, the function would busy
  loop, as select(2) will always return immediately.
  
  We can just receive nvlhdr now, because some time ago we splitted receive of
  data from the receive of descriptors.
  
  r260222 (by pjd):
  
  MFp4 @1189711:
  
  Fix resource leaks on nvlist_destroy().
  
  Reported by:	Mariusz Zaborski <oshogbo@FreeBSD.org>
  
  r261407 (by pjd):
  
  Fix sending empty nvlist.
  
  Submitted by:	Mariusz Zaborski <oshogbo@FreeBSD.org>
  
  r261408 (by pjd):
  
  Assert input arguments to buf_send() and buf_recv().
  
  Submitted by:	Mariusz Zaborski <oshogbo@FreeBSD.org>
  
  r263479 (by bdrewery):
  
  nv(3) was not in 10.0.
  
  It might be MFC'd to stable/10 for 10.1, but for now update the manual to
  avoid confusion on its availability.
  
  Discussed with:	pjd
  
  r264021 (by jilles):
  
  libnv: Don't lose big-endian flag when receiving a message.
  
  A bug caused the "big endian" flag to be lost when receiving a message. As a
  result, the bits are interpreted as little endian and an extremely large
  allocation is attempted.
  
  This change fixes ping(8)'s communication to casperd(8) on big-endian
  architectures.
  
  Reported by:	Anton Shterenlikht
  Tested by:	danfe
  
  r266351 (by rstone):
  
  Correct a typo.
  
  r269603:
  
  Integrate lib/libnv into the build/kyua
  
  Rename all of the TAP test applications from <test> to <test>_test
  to match the convention described in the TestSuite wiki page
  
  Phabric: D538
  Approved by: jmmv (mentor)
  Sponsored by: EMC / Isilon Storage Division

Added:
  user/ngie/stable-10-libnv/lib/libnv/
     - copied from r258065, head/lib/libnv/
  user/ngie/stable-10-libnv/lib/libnv/tests/
     - copied from r269603, head/lib/libnv/tests/
Modified:
  user/ngie/stable-10-libnv/contrib/mdocml/lib.in
  user/ngie/stable-10-libnv/etc/mtree/BSD.tests.dist
  user/ngie/stable-10-libnv/lib/Makefile
  user/ngie/stable-10-libnv/lib/libnv/Makefile
  user/ngie/stable-10-libnv/lib/libnv/msgio.c
  user/ngie/stable-10-libnv/lib/libnv/msgio.h
  user/ngie/stable-10-libnv/lib/libnv/nv.3
  user/ngie/stable-10-libnv/lib/libnv/nvlist.c
  user/ngie/stable-10-libnv/lib/libnv/nvpair.c
  user/ngie/stable-10-libnv/share/mk/bsd.libnames.mk
Directory Properties:
  user/ngie/stable-10-libnv/   (props changed)

Modified: user/ngie/stable-10-libnv/contrib/mdocml/lib.in
==============================================================================
--- user/ngie/stable-10-libnv/contrib/mdocml/lib.in	Tue Dec 22 22:52:37 2015	(r292630)
+++ user/ngie/stable-10-libnv/contrib/mdocml/lib.in	Tue Dec 22 23:02:12 2015	(r292631)
@@ -67,6 +67,7 @@ LINE("libmemstat",	"Kernel Memory Alloca
 LINE("libmenu",		"Curses Menu Library (libmenu, \\-lmenu)")
 LINE("libnetgraph",	"Netgraph User Library (libnetgraph, \\-lnetgraph)")
 LINE("libnetpgp",	"Netpgp signing, verification, encryption and decryption (libnetpgp, \\-lnetpgp)")
+LINE("libnv",		"Name/value pairs library (libnv, \\-lnv)")
 LINE("libossaudio",	"OSS Audio Emulation Library (libossaudio, \\-lossaudio)")
 LINE("libpam",		"Pluggable Authentication Module Library (libpam, \\-lpam)")
 LINE("libpcap",		"Packet Capture Library (libpcap, \\-lpcap)")

Modified: user/ngie/stable-10-libnv/etc/mtree/BSD.tests.dist
==============================================================================
--- user/ngie/stable-10-libnv/etc/mtree/BSD.tests.dist	Tue Dec 22 22:52:37 2015	(r292630)
+++ user/ngie/stable-10-libnv/etc/mtree/BSD.tests.dist	Tue Dec 22 23:02:12 2015	(r292631)
@@ -140,6 +140,8 @@
         ..
         libmp
         ..
+        libnv
+        ..
         librt
         ..
         libthr
@@ -204,7 +206,6 @@
             execve
             ..
             pipe
-            ..
         ..
         kqueue
         ..

Modified: user/ngie/stable-10-libnv/lib/Makefile
==============================================================================
--- user/ngie/stable-10-libnv/lib/Makefile	Tue Dec 22 22:52:37 2015	(r292630)
+++ user/ngie/stable-10-libnv/lib/Makefile	Tue Dec 22 23:02:12 2015	(r292631)
@@ -70,6 +70,7 @@ SUBDIR=	${SUBDIR_ORDERED} \
 	libnetbsd \
 	${_libnetgraph} \
 	${_libngatm} \
+	libnv \
 	libopie \
 	libpam \
 	libpcap \

Modified: user/ngie/stable-10-libnv/lib/libnv/Makefile
==============================================================================
--- head/lib/libnv/Makefile	Tue Nov 12 19:39:14 2013	(r258065)
+++ user/ngie/stable-10-libnv/lib/libnv/Makefile	Tue Dec 22 23:02:12 2015	(r292631)
@@ -1,5 +1,7 @@
 # $FreeBSD$
 
+.include <src.opts.mk>
+
 LIB=	nv
 SHLIBDIR?= /lib
 SHLIB_MAJOR= 0
@@ -158,4 +160,8 @@ MLINKS+=nv.3 nvlist_existsv.3 \
 
 WARNS?=	6
 
+.if ${MK_TESTS} != "no"
+SUBDIR+=	tests
+.endif
+
 .include <bsd.lib.mk>

Modified: user/ngie/stable-10-libnv/lib/libnv/msgio.c
==============================================================================
--- head/lib/libnv/msgio.c	Tue Nov 12 19:39:14 2013	(r258065)
+++ user/ngie/stable-10-libnv/lib/libnv/msgio.c	Tue Dec 22 23:02:12 2015	(r292631)
@@ -113,30 +113,6 @@ fd_wait(int fd, bool doread)
 	    NULL, NULL);
 }
 
-int
-msg_peek(int sock, void *buf, size_t size)
-{
-	ssize_t done;
-
-	PJDLOG_ASSERT(sock >= 0);
-	PJDLOG_ASSERT(size > 0);
-
-	do {
-		fd_wait(sock, true);
-		done = recv(sock, buf, size, MSG_PEEK | MSG_WAITALL);
-		if (done == -1) {
-			if (errno == EAGAIN || errno == EINTR)
-				continue;
-			return (-1);
-		} else if (done == 0) {
-			errno = ENOTCONN;
-			return (-1);
-		}
-	} while (done != (ssize_t)size);
-
-	return (0);
-}
-
 static int
 msg_recv(int sock, struct msghdr *msg)
 {
@@ -362,6 +338,10 @@ buf_send(int sock, void *buf, size_t siz
 	ssize_t done;
 	unsigned char *ptr;
 
+	PJDLOG_ASSERT(sock >= 0);
+	PJDLOG_ASSERT(size > 0);
+	PJDLOG_ASSERT(buf != NULL);
+
 	ptr = buf;
 	do {
 		fd_wait(sock, false);
@@ -387,8 +367,11 @@ buf_recv(int sock, void *buf, size_t siz
 	ssize_t done;
 	unsigned char *ptr;
 
+	PJDLOG_ASSERT(sock >= 0);
+	PJDLOG_ASSERT(buf != NULL);
+
 	ptr = buf;
-	do {
+	while (size > 0) {
 		fd_wait(sock, true);
 		done = recv(sock, ptr, size, 0);
 		if (done == -1) {
@@ -401,7 +384,7 @@ buf_recv(int sock, void *buf, size_t siz
 		}
 		size -= done;
 		ptr += done;
-	} while (size > 0);
+	}
 
 	return (0);
 }

Modified: user/ngie/stable-10-libnv/lib/libnv/msgio.h
==============================================================================
--- head/lib/libnv/msgio.h	Tue Nov 12 19:39:14 2013	(r258065)
+++ user/ngie/stable-10-libnv/lib/libnv/msgio.h	Tue Dec 22 23:02:12 2015	(r292631)
@@ -38,8 +38,6 @@ struct cmsgcred;
 struct iovec;
 struct msghdr;
 
-int msg_peek(int sock, void *buf, size_t size);
-
 int cred_send(int sock);
 int cred_recv(int sock, struct cmsgcred *cred);
 

Modified: user/ngie/stable-10-libnv/lib/libnv/nv.3
==============================================================================
--- head/lib/libnv/nv.3	Tue Nov 12 19:39:14 2013	(r258065)
+++ user/ngie/stable-10-libnv/lib/libnv/nv.3	Tue Dec 22 23:02:12 2015	(r292631)
@@ -28,7 +28,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd October 8, 2013
+.Dd March 21, 2014
 .Dt NV 3
 .Os
 .Sh NAME
@@ -194,7 +194,7 @@ The API supports the following data type
 .Bl -ohang -offset indent
 .It Sy null ( NV_TYPE_NULL )
 There is no data associated with the name.
-.It Sy bool ( NV_TYPE_BOLL )
+.It Sy bool ( NV_TYPE_BOOL )
 The value can be either
 .Dv true
 or
@@ -594,7 +594,7 @@ while ((name = nvlist_next(nvl, &type, &
 The
 .Nm libnv
 library appeared in
-.Fx 10.0 .
+.Fx 11.0 .
 .Sh AUTHORS
 .An -nosplit
 The

Modified: user/ngie/stable-10-libnv/lib/libnv/nvlist.c
==============================================================================
--- head/lib/libnv/nvlist.c	Tue Nov 12 19:39:14 2013	(r258065)
+++ user/ngie/stable-10-libnv/lib/libnv/nvlist.c	Tue Dec 22 23:02:12 2015	(r292631)
@@ -125,8 +125,10 @@ nvlist_destroy(nvlist_t *nvl)
 
 	NVLIST_ASSERT(nvl);
 
-	while ((nvp = nvlist_first_nvpair(nvl)) != NULL)
+	while ((nvp = nvlist_first_nvpair(nvl)) != NULL) {
 		nvlist_remove_nvpair(nvl, nvp);
+		nvpair_free(nvp);
+	}
 	nvl->nvl_magic = 0;
 	free(nvl);
 
@@ -580,7 +582,7 @@ nvlist_check_header(struct nvlist_header
 		errno = EINVAL;
 		return (false);
 	}
-	if ((nvlhdrp->nvlh_flags &= ~NV_FLAG_ALL_MASK) != 0) {
+	if ((nvlhdrp->nvlh_flags & ~NV_FLAG_ALL_MASK) != 0) {
 		errno = EINVAL;
 		return (false);
 	}
@@ -724,11 +726,11 @@ nvlist_recv(int sock)
 {
 	struct nvlist_header nvlhdr;
 	nvlist_t *nvl, *ret;
+	unsigned char *buf;
 	size_t nfds, size;
-	void *buf;
 	int serrno, *fds;
 
-	if (msg_peek(sock, &nvlhdr, sizeof(nvlhdr)) == -1)
+	if (buf_recv(sock, &nvlhdr, sizeof(nvlhdr)) == -1)
 		return (NULL);
 
 	if (!nvlist_check_header(&nvlhdr))
@@ -741,10 +743,12 @@ nvlist_recv(int sock)
 	if (buf == NULL)
 		return (NULL);
 
+	memcpy(buf, &nvlhdr, sizeof(nvlhdr));
+
 	ret = NULL;
 	fds = NULL;
 
-	if (buf_recv(sock, buf, size) == -1)
+	if (buf_recv(sock, buf + sizeof(nvlhdr), size - sizeof(nvlhdr)) == -1)
 		goto out;
 
 	if (nfds > 0) {

Modified: user/ngie/stable-10-libnv/lib/libnv/nvpair.c
==============================================================================
--- head/lib/libnv/nvpair.c	Tue Nov 12 19:39:14 2013	(r258065)
+++ user/ngie/stable-10-libnv/lib/libnv/nvpair.c	Tue Dec 22 23:02:12 2015	(r292631)
@@ -683,10 +683,8 @@ nvpair_unpack(int flags, const unsigned 
 	if (ptr == NULL)
 		goto failed;
 	tmp = realloc(nvp, sizeof(*nvp) + strlen(nvp->nvp_name) + 1);
-	if (tmp == NULL) {
-		free(nvp);
+	if (tmp == NULL)
 		goto failed;
-	}
 	nvp = tmp;
 	/* Update nvp_name after realloc(). */
 	nvp->nvp_name = (char *)(nvp + 1);

Modified: user/ngie/stable-10-libnv/share/mk/bsd.libnames.mk
==============================================================================
--- user/ngie/stable-10-libnv/share/mk/bsd.libnames.mk	Tue Dec 22 22:52:37 2015	(r292630)
+++ user/ngie/stable-10-libnv/share/mk/bsd.libnames.mk	Tue Dec 22 23:02:12 2015	(r292631)
@@ -100,6 +100,7 @@ LIBNCURSES?=	${DESTDIR}${LIBDIR}/libncur
 LIBNCURSESW?=	${DESTDIR}${LIBDIR}/libncursesw.a
 LIBNETGRAPH?=	${DESTDIR}${LIBDIR}/libnetgraph.a
 LIBNGATM?=	${DESTDIR}${LIBDIR}/libngatm.a
+LIBNV?=		${DESTDIR}${LIBDIR}/libnv.a
 LIBNVPAIR?=	${DESTDIR}${LIBDIR}/libnvpair.a
 LIBOPIE?=	${DESTDIR}${LIBDIR}/libopie.a
 



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