From 0896602f6e7c409990fcae40dd54f84260312472 Mon Sep 17 00:00:00 2001 From: Jeffrey Altman Date: Mon, 2 Apr 2012 06:57:53 -0400 Subject: [PATCH 1/1] Windows FindACLCache must hold scp write locked In the SMB modules, calls to cm_FindACLCache() were not holding the cm_scache_t rwlock writed locked as required. Change-Id: I213912eb8dd570ea918d92602c647e6aed8cfccb Reviewed-on: http://gerrit.openafs.org/7015 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- src/WINNT/afsd/smb.c | 4 ++-- src/WINNT/afsd/smb3.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/WINNT/afsd/smb.c b/src/WINNT/afsd/smb.c index b7e6bdd..6836ff9 100644 --- a/src/WINNT/afsd/smb.c +++ b/src/WINNT/afsd/smb.c @@ -4641,17 +4641,17 @@ smb_ApplyDirListPatches(cm_scache_t * dscp, smb_dirListPatch_t **dirPatchespp, afs_uint32 rights; afs_int32 mustFake = 0; + lock_ObtainWrite(&dscp->rw); code = cm_FindACLCache(dscp, userp, &rights); if (code == -1) { - lock_ObtainWrite(&dscp->rw); code = cm_SyncOp(dscp, NULL, userp, reqp, PRSFS_READ, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); - lock_ReleaseWrite(&dscp->rw); if (code == CM_ERROR_NOACCESS) { mustFake = 1; code = 0; } } + lock_ReleaseWrite(&dscp->rw); if (code) goto cleanup; diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index 3e11598..e2eae0d 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -4556,19 +4556,19 @@ smb_ApplyV3DirListPatches(cm_scache_t *dscp, smb_dirListPatch_t **dirPatchespp, afs_int32 mustFake = 0; clientchar_t path[AFSPATHMAX]; + lock_ObtainWrite(&dscp->rw); code = cm_FindACLCache(dscp, userp, &rights); if (code == -1) { - lock_ObtainWrite(&dscp->rw); code = cm_SyncOp(dscp, NULL, userp, reqp, PRSFS_READ, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); if (code == 0) cm_SyncOpDone(dscp, NULL, CM_SCACHESYNC_NEEDCALLBACK | CM_SCACHESYNC_GETSTATUS); - lock_ReleaseWrite(&dscp->rw); if (code == CM_ERROR_NOACCESS) { mustFake = 1; code = 0; } } + lock_ReleaseWrite(&dscp->rw); if (code) goto cleanup; -- 1.9.4