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)
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to