summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorGordon Ross <gordon.ross@tintri.com>2021-02-06 15:18:50 -0500
committerGordon Ross <gordon.ross@tintri.com>2021-02-11 15:29:40 -0500
commit168091e5da87ff8dbec35e48d0cebe8b5221365d (patch)
treef7cad34f39f11976a9d7f19b77e4e3b1520910a9 /usr/src
parent72973a2ec5f92e2ddf35c4a344567980fae70ec1 (diff)
downloadillumos-joyent-168091e5da87ff8dbec35e48d0cebe8b5221365d.tar.gz
13506 smbfs panic on failed open for append
Reviewed by: Dan McDonald <danmcd@joyent.com> Reviewed by: Yuri Pankov <ypankov@tintri.com> Reviewed by: Evan Layton <elayton@tintri.com> Approved by: Robert Mustacchi <rm@fingolfin.org>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/uts/common/fs/smbclnt/smbfs/smbfs_smb.c4
-rw-r--r--usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c15
2 files changed, 16 insertions, 3 deletions
diff --git a/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_smb.c b/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_smb.c
index 73b5c62225..16b9987972 100644
--- a/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_smb.c
+++ b/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_smb.c
@@ -34,7 +34,7 @@
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*
- * Copyright 2019 Nexenta by DDN, Inc. All rights reserved.
+ * Copyright 2021 Tintri by DDN, Inc. All rights reserved.
*/
#include <sys/param.h>
@@ -439,7 +439,7 @@ out:
if (fhp != NULL)
smb_fh_rele(fhp);
- return (0);
+ return (error);
}
void
diff --git a/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c b/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c
index 3fca806155..c19e92976f 100644
--- a/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c
+++ b/usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c
@@ -34,7 +34,7 @@
/*
* Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
- * Copyright 2018 Nexenta Systems, Inc. All rights reserved.
+ * Copyright 2021 Tintri by DDN, Inc. All rights reserved.
*/
/*
@@ -326,6 +326,7 @@ smbfs_open(vnode_t **vpp, int flag, cred_t *cr, caller_context_t *ct)
/*
* We have a new FID and access rights.
*/
+ VERIFY(fid != NULL);
oldfid = np->n_fid;
np->n_fid = fid;
np->n_fidrefs++;
@@ -562,6 +563,10 @@ smbfs_read(vnode_t *vp, struct uio *uiop, int ioflag, cred_t *cr,
if (smi->smi_flags & SMI_DEAD || vp->v_vfsp->vfs_flag & VFS_UNMOUNTED)
return (EIO);
+ /* Sanity check: should have a valid open */
+ if (np->n_fid == NULL)
+ return (EIO);
+
ASSERT(smbfs_rw_lock_held(&np->r_rwlock, RW_READER));
if (vp->v_type != VREG)
@@ -723,6 +728,10 @@ smbfs_write(vnode_t *vp, struct uio *uiop, int ioflag, cred_t *cr,
if (smi->smi_flags & SMI_DEAD || vp->v_vfsp->vfs_flag & VFS_UNMOUNTED)
return (EIO);
+ /* Sanity check: should have a valid open */
+ if (np->n_fid == NULL)
+ return (EIO);
+
ASSERT(smbfs_rw_lock_held(&np->r_rwlock, RW_WRITER));
if (vp->v_type != VREG)
@@ -4427,6 +4436,10 @@ smbfs_map(vnode_t *vp, offset_t off, struct as *as, caddr_t *addrp,
if (smi->smi_flags & SMI_DEAD || vp->v_vfsp->vfs_flag & VFS_UNMOUNTED)
return (EIO);
+ /* Sanity check: should have a valid open */
+ if (np->n_fid == NULL)
+ return (EIO);
+
if (vp->v_flag & VNOMAP)
return (ENOSYS);