From: Jeffrey Altman Date: Thu, 28 Jun 2007 01:15:27 +0000 (+0000) Subject: windows-smb-race-20070627 X-Git-Tag: BP-openafs-windows-kdfs-ifs~634 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=7ecca7a58a5cd64c78ee20c712dfe8f419992678;p=packages%2Fo%2Fopenafs.git windows-smb-race-20070627 avoid a race condition when the smb_fidp is closed and an active request is being performed on the referenced cm_scache_t. --- diff --git a/src/WINNT/afsd/smb3.c b/src/WINNT/afsd/smb3.c index abb28f33a..ff9742d89 100644 --- a/src/WINNT/afsd/smb3.c +++ b/src/WINNT/afsd/smb3.c @@ -6183,6 +6183,7 @@ long smb_ReceiveV3WriteX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) cm_key_t key; LARGE_INTEGER LOffset; LARGE_INTEGER LLength; + cm_scache_t * scp; pid = ((smb_t *) inp)->pid; key = cm_GenerateKey(vcp->vcID, pid, fd); @@ -6192,9 +6193,10 @@ long smb_ReceiveV3WriteX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) LLength.HighPart = 0; LLength.LowPart = count; - lock_ObtainMutex(&fidp->scp->mx); - code = cm_LockCheckWrite(fidp->scp, LOffset, LLength, key); - lock_ReleaseMutex(&fidp->scp->mx); + scp = fidp->scp; + lock_ObtainMutex(&scp->mx); + code = cm_LockCheckWrite(scp, LOffset, LLength, key); + lock_ReleaseMutex(&scp->mx); if (code) goto done; @@ -6299,15 +6301,17 @@ long smb_ReceiveV3ReadX(smb_vc_t *vcp, smb_packet_t *inp, smb_packet_t *outp) key = cm_GenerateKey(vcp->vcID, pid, fd); { LARGE_INTEGER LOffset, LLength; + cm_scache_t *scp; LOffset.HighPart = offset.HighPart; LOffset.LowPart = offset.LowPart; LLength.HighPart = 0; LLength.LowPart = count; - lock_ObtainMutex(&fidp->scp->mx); - code = cm_LockCheckRead(fidp->scp, LOffset, LLength, key); - lock_ReleaseMutex(&fidp->scp->mx); + scp = fidp->scp; + lock_ObtainMutex(&scp->mx); + code = cm_LockCheckRead(scp, LOffset, LLength, key); + lock_ReleaseMutex(&scp->mx); } if (code) {