Closed
Bug 600438
Opened 14 years ago
Closed 14 years ago
Fix the locking order assertion in ssl_Get1stHandshakeLock
Categories
(NSS :: Libraries, defect, P2)
Tracking
(Not tracked)
RESOLVED
FIXED
3.13
People
(Reporter: wtc, Assigned: wtc)
Details
Attachments
(1 file)
1.45 KB,
patch
|
nelson
:
review+
|
Details | Diff | Splinter Review |
This continues bug 588698 comment 25.
The proposed patch fixes the assertion as I described in bug 588698 comment 31.
Attachment #479270 -
Flags: review?(nelson)
Comment 1•14 years ago
|
||
Comment on attachment 479270 [details] [diff] [review]
Proposed patch (checked in)
Wan-Teh, Your patch is good, but IMO it doesn't go far enough.
Please consider also applying this supplemental patch to the same file:
@@ -1275,5 +1274,6 @@
#define ssl_GetSSL3HandshakeLock(ss) \
{ if (!ss->opt.noLocks) { \
- PORT_Assert(!ssl_HaveXmitBufLock(ss)); \
+ PORT_Assert(PZ_InMonitor((ss)->ssl3HandshakeLock) || \
+ !ssl_HaveXmitBufLock(ss)); \
PZ_EnterMonitor((ss)->ssl3HandshakeLock); \
} }
@@ -1300,6 +1300,7 @@
#define ssl_GetRecvBufLock(ss) \
{ if (!ss->opt.noLocks) { \
- PORT_Assert(!ssl_HaveSSL3HandshakeLock(ss)); \
- PORT_Assert(!ssl_HaveXmitBufLock(ss)); \
+ PORT_Assert(PZ_InMonitor((ss)->recvBufLock) || \
+ !ssl_HaveSSL3HandshakeLock(ss) && \
+ !ssl_HaveXmitBufLock(ss)); \
PZ_EnterMonitor((ss)->recvBufLock); \
} }
Attachment #479270 -
Flags: review?(nelson) → review+
Assignee | ||
Comment 2•14 years ago
|
||
Nelson: thanks for the suggested changes. I'm not sure if
they are correct.
My patch allows the following locking order:
firstHandshakeLock
recvBufLock
ssl3HandshakeLock
<some callback>
firstHandshakeLock <== recursive
because we want to allow callbacks to call libSSL functions.
Your first suggested change is:
@@ -1275,5 +1274,6 @@
#define ssl_GetSSL3HandshakeLock(ss) \
{ if (!ss->opt.noLocks) { \
- PORT_Assert(!ssl_HaveXmitBufLock(ss)); \
+ PORT_Assert(PZ_InMonitor((ss)->ssl3HandshakeLock) || \
+ !ssl_HaveXmitBufLock(ss)); \
PZ_EnterMonitor((ss)->ssl3HandshakeLock); \
} }
which allows the following locking order:
ssl3HandshakeLock
xmitBufLock
ssl3HandshakeLock <== recursive
This seems undesirable.
Your second suggested change is:
@@ -1300,6 +1300,7 @@
#define ssl_GetRecvBufLock(ss) \
{ if (!ss->opt.noLocks) { \
- PORT_Assert(!ssl_HaveSSL3HandshakeLock(ss)); \
- PORT_Assert(!ssl_HaveXmitBufLock(ss)); \
+ PORT_Assert(PZ_InMonitor((ss)->recvBufLock) || \
+ !ssl_HaveSSL3HandshakeLock(ss) && \
+ !ssl_HaveXmitBufLock(ss)); \
PZ_EnterMonitor((ss)->recvBufLock); \
} }
which allows the following locking orders:
recvBufLock
ssl3HandshakeLock
recvBufLock
and
recvBufLock
xmitBufLock
recvBufLock
The second locking order seems undesirable. I am less
sure about the first locking order. Do you think we should
allow that?
Assignee | ||
Comment 3•14 years ago
|
||
Comment on attachment 479270 [details] [diff] [review]
Proposed patch (checked in)
Patch checked in on the NSS trunk (NSS 3.13).
Checking in sslimpl.h;
/cvsroot/mozilla/security/nss/lib/ssl/sslimpl.h,v <-- sslimpl.h
new revision: 1.81; previous revision: 1.80
done
Attachment #479270 -
Attachment description: Proposed patch → Proposed patch (checked in)
Assignee | ||
Updated•14 years ago
|
Status: ASSIGNED → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•