aboutsummaryrefslogtreecommitdiff
path: root/sys/fs/smbfs
diff options
context:
space:
mode:
authorDavide Italiano <davide@FreeBSD.org>2012-11-26 04:29:47 +0000
committerDavide Italiano <davide@FreeBSD.org>2012-11-26 04:29:47 +0000
commit42039c5bcecb7cfaa2e64fbcc499f6f68a47dd9a (patch)
tree2226e82d15e1adb561e9a052314eec7d8617a3d1 /sys/fs/smbfs
parent1ba706292c3623492c84255ae800ede7daf4a48e (diff)
downloadsrc-42039c5bcecb7cfaa2e64fbcc499f6f68a47dd9a.tar.gz
src-42039c5bcecb7cfaa2e64fbcc499f6f68a47dd9a.zip
- smbfs_rename() might return an error value without correctly upgrading
the vnode use count, and this might cause the kernel to panic if compiled with WITNESS enable. - Be sure to put the '\0' terminator to the rpath string. Sponsored by: iXsystems inc.
Notes
Notes: svn path=/head/; revision=243548
Diffstat (limited to 'sys/fs/smbfs')
-rw-r--r--sys/fs/smbfs/smbfs_node.c1
-rw-r--r--sys/fs/smbfs/smbfs_vnops.c4
2 files changed, 3 insertions, 2 deletions
diff --git a/sys/fs/smbfs/smbfs_node.c b/sys/fs/smbfs/smbfs_node.c
index 2427ebe20283..481fa1d60e22 100644
--- a/sys/fs/smbfs/smbfs_node.c
+++ b/sys/fs/smbfs/smbfs_node.c
@@ -187,6 +187,7 @@ smbfs_node_alloc(struct mount *mp, struct vnode *dvp, const char *dirnm,
bcopy(name, p, nmlen);
p += nmlen;
}
+ *p = '\0';
MPASS(p == rpath + rplen);
lockmgr(vp->v_vnlock, LK_EXCLUSIVE, NULL);
/* Vnode initialization */
diff --git a/sys/fs/smbfs/smbfs_vnops.c b/sys/fs/smbfs/smbfs_vnops.c
index 9b009103f7e7..5570de90450f 100644
--- a/sys/fs/smbfs/smbfs_vnops.c
+++ b/sys/fs/smbfs/smbfs_vnops.c
@@ -583,12 +583,12 @@ smbfs_rename(ap)
/* Check for cross-device rename */
if ((fvp->v_mount != tdvp->v_mount) ||
(tvp && (fvp->v_mount != tvp->v_mount))) {
- return EXDEV;
+ error = EXDEV;
goto out;
}
if (tvp && vrefcnt(tvp) > 1) {
- return EBUSY;
+ error = EBUSY;
goto out;
}
flags = 0x10; /* verify all writes */