svn commit: r324833 - stable/11/sys/contrib/libnv

Mariusz Zaborski oshogbo at FreeBSD.org
Sat Oct 21 19:37:27 UTC 2017


Author: oshogbo
Date: Sat Oct 21 19:37:25 2017
New Revision: 324833
URL: https://svnweb.freebsd.org/changeset/base/324833

Log:
  MFC r323858:
  IMHO it is possible that failure will be treated as success because we don't
  initialize nvp on every loop iteration and the code under 'fail'(!) label
  detects success by checking of nvp != NULL.
  
  Submitted by:	pjd@
  Sponsored by:	Wheel Systems

Modified:
  stable/11/sys/contrib/libnv/nvpair.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/contrib/libnv/nvpair.c
==============================================================================
--- stable/11/sys/contrib/libnv/nvpair.c	Sat Oct 21 19:36:22 2017	(r324832)
+++ stable/11/sys/contrib/libnv/nvpair.c	Sat Oct 21 19:37:25 2017	(r324833)
@@ -1690,11 +1690,10 @@ nvpair_move_number_array(const char *name, uint64_t *v
 nvpair_t *
 nvpair_move_nvlist_array(const char *name, nvlist_t **value, size_t nitems)
 {
+	nvpair_t *parent;
 	unsigned int ii;
-	nvpair_t *nvp;
 	int flags;
 
-	nvp = NULL;
 	if (value == NULL || nitems == 0) {
 		ERRNO_SET(EINVAL);
 		return (NULL);
@@ -1707,6 +1706,8 @@ nvpair_move_nvlist_array(const char *name, nvlist_t **
 			goto fail;
 		}
 		if (ii > 0) {
+			nvpair_t *nvp;
+
 			nvp = nvpair_allocv(" ", NV_TYPE_NVLIST,
 			    (uint64_t)(uintptr_t)value[ii], 0, 0);
 			if (nvp == NULL)
@@ -1717,25 +1718,27 @@ nvpair_move_nvlist_array(const char *name, nvlist_t **
 	flags = nvlist_flags(value[nitems - 1]) | NV_FLAG_IN_ARRAY;
 	nvlist_set_flags(value[nitems - 1], flags);
 
-	nvp = nvpair_allocv(name, NV_TYPE_NVLIST_ARRAY,
+	parent = nvpair_allocv(name, NV_TYPE_NVLIST_ARRAY,
 	    (uint64_t)(uintptr_t)value, 0, nitems);
+	if (parent == NULL)
+		goto fail;
+
+	for (ii = 0; ii < nitems; ii++)
+		nvlist_set_parent(value[ii], parent);
+
+	return (parent);
 fail:
-	if (nvp == NULL) {
-		ERRNO_SAVE();
-		for (ii = 0; ii < nitems; ii++) {
-			if (value[ii] != NULL &&
-			    nvlist_get_pararr(value[ii], NULL) != NULL) {
-				nvlist_destroy(value[ii]);
-			}
+	ERRNO_SAVE();
+	for (ii = 0; ii < nitems; ii++) {
+		if (value[ii] != NULL &&
+		    nvlist_get_pararr(value[ii], NULL) != NULL) {
+			nvlist_destroy(value[ii]);
 		}
-		nv_free(value);
-		ERRNO_RESTORE();
-	} else {
-		for (ii = 0; ii < nitems; ii++)
-			nvlist_set_parent(value[ii], nvp);
 	}
+	nv_free(value);
+	ERRNO_RESTORE();
 
-	return (nvp);
+	return (NULL);
 }
 
 #ifndef _KERNEL


More information about the svn-src-stable mailing list