diff options
author | Davide Italiano <davide@FreeBSD.org> | 2012-11-26 04:29:47 +0000 |
---|---|---|
committer | Davide Italiano <davide@FreeBSD.org> | 2012-11-26 04:29:47 +0000 |
commit | 42039c5bcecb7cfaa2e64fbcc499f6f68a47dd9a (patch) | |
tree | 2226e82d15e1adb561e9a052314eec7d8617a3d1 /sys/fs/smbfs | |
parent | 1ba706292c3623492c84255ae800ede7daf4a48e (diff) | |
download | src-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.c | 1 | ||||
-rw-r--r-- | sys/fs/smbfs/smbfs_vnops.c | 4 |
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 */ |