Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 03 Apr 2010 18:29:51 +0300
From:      Andriy Gapon <avg@freebsd.org>
To:        Xin LI <delphij@freebsd.org>
Cc:        svn-src-head@freebsd.org, svn-src-all@freebsd.org, src-committers@freebsd.org, Pawel Jakub Dawidek <pjd@freebsd.org>, =?UTF-8?B?TWFydGluIE1hdHXFoWth?= <mm@freebsd.org>
Subject:   Re: svn commit: r205198 - in head/cddl/contrib/opensolaris: cmd/zfs lib/libzfs/common
Message-ID:  <4BB75EEF.8060201@freebsd.org>
In-Reply-To: <4BB75C8D.8070607@freebsd.org>
References:  <201003160048.o2G0mReg025652@svn.freebsd.org> <4BB75C8D.8070607@freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
on 03/04/2010 18:19 Andriy Gapon said the following:
> It seems that this commit causes a crash in zfs(1) when e.g. 'zfs list' is
> executed and one of the filesystems has a user property set on it.
> 
> The crash is in zfs_prune_proplist function at
> cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c:4291.
> 
> Relevant code snippet:
> 4286
> 4287            while (curr) {
> 4288                    zfs_prop_t zfs_prop = zfs_name_to_prop(nvpair_name(curr));
> 4289                    nvpair_t *next = nvlist_next_nvpair(zhp->zfs_props, curr);
> 4290
> 4291                    if (props[zfs_prop] == B_FALSE)
> 4292                            (void) nvlist_remove(zhp->zfs_props,
> 4293                                nvpair_name(curr), nvpair_type(curr));
> 4294                    curr = next;
> 4295            }
> 
> zfs_prop is (-1) and nvpair_name(curr) is my custom property "avg:nobackup".
> Not sure if this was fixed in OpenSolaris or what.

BTW, I use this simplistic change for time being, not sure if this is a correct fix.

--- a/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
+++ b/cddl/contrib/opensolaris/lib/libzfs/common/libzfs_dataset.c
@@ -4288,7 +4288,7 @@ zfs_prune_proplist(zfs_handle_t *zhp, uint8_t *props)
 		zfs_prop_t zfs_prop = zfs_name_to_prop(nvpair_name(curr));
 		nvpair_t *next = nvlist_next_nvpair(zhp->zfs_props, curr);

-		if (props[zfs_prop] == B_FALSE)
+		if (zfs_prop != ZPROP_INVAL && props[zfs_prop] == B_FALSE)
 			(void) nvlist_remove(zhp->zfs_props,
 			    nvpair_name(curr), nvpair_type(curr));
 		curr = next;


-- 
Andriy Gapon



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