OpenAFS CVS Commit: openafs/src/WINNT/client_creds by jaltman

cvs@GRAND.CENTRAL.ORG cvs@GRAND.CENTRAL.ORG
Fri, 22 Aug 2008 14:06:15 EDT


Update of /cvs/openafs/src/WINNT/client_creds
In directory GRAND.CENTRAL.ORG:/home/jaltman/openafs/cvs-head/src/WINNT/client_creds

Modified Files:
	main.cpp 
Log Message:
DELTA windows-misc-20080822
AUTHOR jaltman@secure-endpoints.com
LICENSE MIT

1. In multi-threaded applications deadlocking is always a problem.  
Deadlock avoidance requires a strict adherence to a documented 
hierarchy.  The lock hierarchy for OAFW is described in a file 
called locks.txt.  There are two problems.  First, some of the 
locks are not included in locks.txt.  Second, it is nearly 
impossible given the depth of function calls for any programmer
 to identify all of the locks that are held at any given time 
a function is called.  This patch implements a new locking order 
verification mechanism.  Each lock is assigned a lock level at 
initialization.  Each thread maintains a queue of held locks.  
Each time a lock is acquired the queue is checked to ensure that 
no locks with a higher level than the requested lock has already 
been acquired.  If a violation occurs, the service panics.

2. When the service panics ensure that a minidump will always be generated.

3. Remove unused lock cm_bufGetMutex.

4. The lock order verifier identified approximately a dozen 
lock order violations that are corrected.

5. A race condition within the function path cm_GetSCache() -> 
cm_GetNewSCache() -> cm_RecycleSCache() permitted a cm_scache_t 
object to be issued simultaneously to two threads.  This would 
eventually result in a panic due to the resulting under count.

6. Fix interpretation of the empty string as the ioctl path to 
mean the current directory.   "fs lsm", "symlink list", etc. 
now return a "not a ..." error instead of "does not exist".

7. Add SMB_STRF_SRCNULTERM flag to smb_ParseStringXXX functions 
to indicate that the input string is a nul terminated string.  
Assign it when input strings are nul terminated.

8. The CIFS protocol specification for handling NT_TRANSACT_CREATE 
does not match the observed behavior.  The 'nameLength' is specified 
in bytes not in characters.  Fix the implementation to match.

9. The cm_HaveAccessRights() attempt at deadlock avoidance by calling 
lock_TryRead() on the parent directory cm_scache_t rw-lock does not 
avoid the deadlock.  Avoid the deadlock by enforcing the lock order 
of lowest vnode first.  Then remove the infinite loop avoidance in 
cm_SyncOp() that was returning an unwarranted access denied error.




--- DELTA config follows ---
windows-misc-20080822 openafs/src/WINNT/client_creds/main.cpp 1.19 1.20