Author: avg
Date: Sun Feb 12 19:40:59 2017
New Revision: 313686
URL: https://svnweb.freebsd.org/changeset/base/313686

Log:
  check remaining space in zfs implementations of vptocnp
  
  PR:           216939
  Submitted by: Iouri V. Ivliev <f...@any.com.ru>
  MFC after:    1 week

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

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c    Sun Feb 
12 18:52:01 2017        (r313685)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_ctldir.c    Sun Feb 
12 19:40:59 2017        (r313686)
@@ -1604,16 +1604,21 @@ zfsctl_snapshot_vptocnp(struct vop_vptoc
        }
        if (sep == NULL) {
                mutex_exit(&sdp->sd_lock);
-               error = ENOENT;
+               error = SET_ERROR(ENOENT);
        } else {
                size_t len;
 
                len = strlen(sep->se_name);
-               *ap->a_buflen -= len;
-               bcopy(sep->se_name, ap->a_buf + *ap->a_buflen, len);
-               mutex_exit(&sdp->sd_lock);
-               vref(dvp);
-               *ap->a_vpp = dvp;
+               if (*ap->a_buflen < len) {
+                       mutex_exit(&sdp->sd_lock);
+                       error = SET_ERROR(ENOMEM);
+               } else {
+                       *ap->a_buflen -= len;
+                       bcopy(sep->se_name, ap->a_buf + *ap->a_buflen, len);
+                       mutex_exit(&sdp->sd_lock);
+                       vref(dvp);
+                       *ap->a_vpp = dvp;
+               }
        }
        VN_RELE(dvp);
 

Modified: head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c
==============================================================================
--- head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Sun Feb 
12 18:52:01 2017        (r313685)
+++ head/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/zfs_vnops.c     Sun Feb 
12 19:40:59 2017        (r313686)
@@ -5939,6 +5939,10 @@ zfs_vptocnp(struct vop_vptocnp_args *ap)
                error = zfs_znode_parent_and_name(zp, &dzp, name);
                if (error == 0) {
                        len = strlen(name);
+                       if (*ap->a_buflen < len)
+                               error = SET_ERROR(ENOMEM);
+               }
+               if (error == 0) {
                        *ap->a_buflen -= len;
                        bcopy(name, ap->a_buf + *ap->a_buflen, len);
                        *ap->a_vpp = ZTOV(dzp);
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to