summaryrefslogtreecommitdiffstats
path: root/sys/netsmb
diff options
context:
space:
mode:
authorrwatson <rwatson@FreeBSD.org>2008-11-02 20:22:24 +0000
committerrwatson <rwatson@FreeBSD.org>2008-11-02 20:22:24 +0000
commit8287eede8234a2d0bde06e0ca1635c406e0cd6a9 (patch)
tree2042fcdb1ae11e45db86a371fb69f95e1e5a17bd /sys/netsmb
parentb563afb1641962b2b7aed20467423c4338d37ff9 (diff)
downloadFreeBSD-src-8287eede8234a2d0bde06e0ca1635c406e0cd6a9.zip
FreeBSD-src-8287eede8234a2d0bde06e0ca1635c406e0cd6a9.tar.gz
smb_vc_put() requires that the passed vcp be locked, so lock it before
dropping the connection when the requested service isn't available, or we may try to release a lock that isn't locked. This prevents an assertion failure when trying to mount a non-present share using smbfs with INVARIANTS; a lock order reversal warning that immediately follows is not yet fixed. Reported by: attilio MFC after: 3 days
Diffstat (limited to 'sys/netsmb')
-rw-r--r--sys/netsmb/smb_conn.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/sys/netsmb/smb_conn.c b/sys/netsmb/smb_conn.c
index 82f6382..3480181 100644
--- a/sys/netsmb/smb_conn.c
+++ b/sys/netsmb/smb_conn.c
@@ -218,8 +218,10 @@ out:
smb_sm_unlockvclist(td);
if (error == 0)
*vcpp = vcp;
- else if (vcp)
+ else if (vcp) {
+ smb_vc_lock(vcp, LK_EXCLUSIVE, scred->scr_td);
smb_vc_put(vcp, scred);
+ }
return error;
}
OpenPOWER on IntegriCloud