Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Aug 2013 11:38:09 +0000 (UTC)
From:      Steven Hartland <smh@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r253926 - head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs
Message-ID:  <201308041138.r74Bc9M6026692@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: smh
Date: Sun Aug  4 11:38:08 2013
New Revision: 253926
URL: http://svnweb.freebsd.org/changeset/base/253926

Log:
  zfs_ioc_rename should not leave the value of zc_name passed in via zc altered
  on return.
  
  MFC after:	1 week

Modified:
  head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c	Sun Aug  4 07:10:16 2013	(r253925)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ioctl.c	Sun Aug  4 11:38:08 2013	(r253926)
@@ -3612,6 +3612,8 @@ zfs_ioc_rename(zfs_cmd_t *zc)
 	at = strchr(zc->zc_name, '@');
 	if (at != NULL) {
 		/* snaps must be in same fs */
+		int error;
+
 		if (strncmp(zc->zc_name, zc->zc_value, at - zc->zc_name + 1))
 			return (SET_ERROR(EXDEV));
 		*at = '\0';
@@ -3620,14 +3622,19 @@ zfs_ioc_rename(zfs_cmd_t *zc)
 #else
 		if (zc->zc_objset_type == DMU_OST_ZFS && allow_mounted) {
 #endif
-			int error = dmu_objset_find(zc->zc_name,
+			error = dmu_objset_find(zc->zc_name,
 			    recursive_unmount, at + 1,
 			    recursive ? DS_FIND_CHILDREN : 0);
-			if (error != 0)
+			if (error != 0) {
+				*at = '@';
 				return (error);
+			}
 		}
-		return (dsl_dataset_rename_snapshot(zc->zc_name,
-		    at + 1, strchr(zc->zc_value, '@') + 1, recursive));
+		error = dsl_dataset_rename_snapshot(zc->zc_name,
+		    at + 1, strchr(zc->zc_value, '@') + 1, recursive);
+		*at = '@';
+
+		return (error);
 	} else {
 #ifdef illumos
 		if (zc->zc_objset_type == DMU_OST_ZVOL)



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