svn commit: r291656 - stable/9/sys/netsmb
Rick Macklem
rmacklem at FreeBSD.org
Wed Dec 2 21:56:03 UTC 2015
Author: rmacklem
Date: Wed Dec 2 21:56:01 2015
New Revision: 291656
URL: https://svnweb.freebsd.org/changeset/base/291656
Log:
MFC: r291035
The problem report was for a crash that happened when smbfs was
trying to do a mount. Given the backtrace,
it appears that the crash occurred when smb_vc_create() failed and then
called smb_vc_put() with vcp->vc_iod == NULL. smb_vc_put() subsequently
called smb_vc_disconnect() with vcp->vc_iod == NULL, causing the crash.
This patch adds a check for vcp->vc_iod != NULL in smb_vc_disconnect() to
avoid the crash. It also fixes the case in smb_vc_create() where
kproc_create() fails so that it destroys the mutexes and sets
vcp->vc_iod == NULL before free()'ing the iod structure.
Modified:
stable/9/sys/netsmb/smb_conn.c
stable/9/sys/netsmb/smb_iod.c
Directory Properties:
stable/9/sys/ (props changed)
Modified: stable/9/sys/netsmb/smb_conn.c
==============================================================================
--- stable/9/sys/netsmb/smb_conn.c Wed Dec 2 21:48:34 2015 (r291655)
+++ stable/9/sys/netsmb/smb_conn.c Wed Dec 2 21:56:01 2015 (r291656)
@@ -654,7 +654,9 @@ int
smb_vc_disconnect(struct smb_vc *vcp)
{
- smb_iod_request(vcp->vc_iod, SMBIOD_EV_DISCONNECT | SMBIOD_EV_SYNC, NULL);
+ if (vcp->vc_iod != NULL)
+ smb_iod_request(vcp->vc_iod, SMBIOD_EV_DISCONNECT |
+ SMBIOD_EV_SYNC, NULL);
return 0;
}
Modified: stable/9/sys/netsmb/smb_iod.c
==============================================================================
--- stable/9/sys/netsmb/smb_iod.c Wed Dec 2 21:48:34 2015 (r291655)
+++ stable/9/sys/netsmb/smb_iod.c Wed Dec 2 21:56:01 2015 (r291656)
@@ -690,6 +690,9 @@ smb_iod_create(struct smb_vc *vcp)
RFNOWAIT, 0, "smbiod%d", iod->iod_id);
if (error) {
SMBERROR("can't start smbiod: %d", error);
+ vcp->vc_iod = NULL;
+ smb_sl_destroy(&iod->iod_rqlock);
+ smb_sl_destroy(&iod->iod_evlock);
free(iod, M_SMBIOD);
return error;
}
More information about the svn-src-stable-9
mailing list