LICENSE IPL10
FIXES 114555
because rx_Finalize doesn't clean up, we end up reiniting mutexes. use
pthread_once when not in the kernel.
(kernel does not now call rx_Finalize, ever)
LICENSE MIT
add a free list to the cm_cell_t structure. if during cm_GetCellGen()
the cm_SearchCellXXX() calls fail, store the allocated cm_cell_t object
on a free list so that it can be reused for the next request.
LICENSE MIT
Add TransarcAFSDaemon/Parameters key "LockOrderValidation" DWORD
to control lock order validation functionality. Defaults to off
for release builds and on for checked builds.
LICENSE MIT
Add osi_SetLockOrderValidation(int) to permit lock order validation
to be turned on and off. Must be executed before the first lock
is obtained.
LICENSE MIT
Protect against a heap overwrite that could occur is the number of file
servers or vldb servers grows while the maximum number of connections
is computed and when the connection list is populated.
LICENSE MIT
plus and equal are not valid characters in short names.
we replace them with left and right brace in order to
minimize the instability in the file names.
LICENSE MIT
smb_dirSearch_t refCount field is protected by smb_globalLock not the
smb_dirSearch_t mutex.
Do not hold the smb_fid_t mutex across calls to smb_NotifyChange()
LICENSE MIT
When the cache manager is shutting down, return an error to all
callback requests. Otherwise, it is possible for a callback to get
stuck waiting for a lock and when the lock clears to be left with
nothing but invalid memory addresses to crash on.
In the meantime, the file server is waiting for the response.
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.
LICENSE IPL10
right now, jumbograms can still be sent when -nojumbo is specified. make the
current macro a default and override when we're supposed to.
LICENSE MIT
Another casaulty of the Unicode transition, the return value of the
ListLink operation was not being convered from wchar to char before
it was copied into the output buffer.
LICENSE MIT
When afsd_service.exe is not running as a service do not call the
Service Manager functions. Doing so causes invalid access exceptions
to be thrown in the kernel and can corrupt the heap.
LICENSE IPL10
FIXES 110943
right now this isn't set until a vnode update happens. technically creating
the root directory is an update, so let's set it to now.