summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/zfs/zfs_ctldir.c
diff options
context:
space:
mode:
authormarks <none@none>2008-05-16 08:55:36 -0700
committermarks <none@none>2008-05-16 08:55:36 -0700
commit6d1e0b89f3e34478a022854df6b0cfab82ccce66 (patch)
treec3ba034a3471e771befb236330be4081cd492999 /usr/src/uts/common/fs/zfs/zfs_ctldir.c
parentd36ea5d8d005e23fe097efbc1795808d752d398f (diff)
downloadillumos-gate-6d1e0b89f3e34478a022854df6b0cfab82ccce66.tar.gz
6700649 zfs_ctldir snapshot creation issues with CIFS clients
Diffstat (limited to 'usr/src/uts/common/fs/zfs/zfs_ctldir.c')
-rw-r--r--usr/src/uts/common/fs/zfs/zfs_ctldir.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/usr/src/uts/common/fs/zfs/zfs_ctldir.c b/usr/src/uts/common/fs/zfs/zfs_ctldir.c
index 56bf50e842..ec3593ae22 100644
--- a/usr/src/uts/common/fs/zfs/zfs_ctldir.c
+++ b/usr/src/uts/common/fs/zfs/zfs_ctldir.c
@@ -78,6 +78,8 @@
#include <sys/mount.h>
#include <sys/sunddi.h>
+#include "zfs_namecheck.h"
+
typedef struct zfsctl_node {
gfs_dir_t zc_gfs_private;
uint64_t zc_id;
@@ -428,6 +430,8 @@ zfsctl_snapshot_zname(vnode_t *vp, const char *name, int len, char *zname)
{
objset_t *os = ((zfsvfs_t *)((vp)->v_vfsp->vfs_data))->z_os;
+ if (snapshot_namecheck(name, NULL, NULL) != 0)
+ return (EILSEQ);
dmu_objset_name(os, zname);
if (strlen(zname) + 1 + strlen(name) >= len)
return (ENAMETOOLONG);
@@ -655,6 +659,9 @@ zfsctl_snapdir_mkdir(vnode_t *dvp, char *dirname, vattr_t *vap, vnode_t **vpp,
static enum symfollow follow = NO_FOLLOW;
static enum uio_seg seg = UIO_SYSSPACE;
+ if (snapshot_namecheck(dirname, NULL, NULL) != 0)
+ return (EILSEQ);
+
dmu_objset_name(zfsvfs->z_os, name);
*vpp = NULL;