diff options
author | Gordon Ross <gordon.ross@tintri.com> | 2021-02-06 15:18:50 -0500 |
---|---|---|
committer | Gordon Ross <gordon.ross@tintri.com> | 2021-02-11 15:29:40 -0500 |
commit | 168091e5da87ff8dbec35e48d0cebe8b5221365d (patch) | |
tree | f7cad34f39f11976a9d7f19b77e4e3b1520910a9 /usr/src | |
parent | 72973a2ec5f92e2ddf35c4a344567980fae70ec1 (diff) | |
download | illumos-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.c | 4 | ||||
-rw-r--r-- | usr/src/uts/common/fs/smbclnt/smbfs/smbfs_vnops.c | 15 |
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); |