Date: Sat, 21 Oct 2017 19:37:26 +0000 (UTC) From: Mariusz Zaborski <oshogbo@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-11@freebsd.org Subject: svn commit: r324833 - stable/11/sys/contrib/libnv Message-ID: <201710211937.v9LJbQ4m019709@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201710211937.v9LJbQ4m019709>