mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 08:23:05 -05:00
sys: silo: ensure FspSiloListMutex in critical region
This commit is contained in:
parent
0eb6912296
commit
4d1594b1cf
@ -207,6 +207,7 @@ static NTSTATUS NTAPI FspSiloMonitorCreateCallback(FSP_PESILO Silo)
|
|||||||
goto exit;
|
goto exit;
|
||||||
Inserted = TRUE;
|
Inserted = TRUE;
|
||||||
|
|
||||||
|
FsRtlEnterFileSystem();
|
||||||
ExAcquireFastMutexUnsafe(&FspSiloListMutex);
|
ExAcquireFastMutexUnsafe(&FspSiloListMutex);
|
||||||
|
|
||||||
if (0 != FspSiloInitCallback)
|
if (0 != FspSiloInitCallback)
|
||||||
@ -220,6 +221,7 @@ static NTSTATUS NTAPI FspSiloMonitorCreateCallback(FSP_PESILO Silo)
|
|||||||
InsertTailList(&FspSiloList, &Globals->ListEntry);
|
InsertTailList(&FspSiloList, &Globals->ListEntry);
|
||||||
|
|
||||||
ExReleaseFastMutexUnsafe(&FspSiloListMutex);
|
ExReleaseFastMutexUnsafe(&FspSiloListMutex);
|
||||||
|
FsRtlExitFileSystem();
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
@ -256,6 +258,7 @@ static VOID NTAPI FspSiloMonitorTerminateCallback(FSP_PESILO Silo)
|
|||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
FsRtlEnterFileSystem();
|
||||||
ExAcquireFastMutexUnsafe(&FspSiloListMutex);
|
ExAcquireFastMutexUnsafe(&FspSiloListMutex);
|
||||||
|
|
||||||
RemoveEntryList(&Globals->ListEntry);
|
RemoveEntryList(&Globals->ListEntry);
|
||||||
@ -270,6 +273,7 @@ static VOID NTAPI FspSiloMonitorTerminateCallback(FSP_PESILO Silo)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ExReleaseFastMutexUnsafe(&FspSiloListMutex);
|
ExReleaseFastMutexUnsafe(&FspSiloListMutex);
|
||||||
|
FsRtlExitFileSystem();
|
||||||
|
|
||||||
/* PsRemoveSiloContext removes reference to Globals (possibly freeing it) */
|
/* PsRemoveSiloContext removes reference to Globals (possibly freeing it) */
|
||||||
CALL(PsRemoveSiloContext)(Silo, ContextSlot, 0);
|
CALL(PsRemoveSiloContext)(Silo, ContextSlot, 0);
|
||||||
@ -355,9 +359,11 @@ VOID FspSiloFinalize(VOID)
|
|||||||
CALL(PsUnregisterSiloMonitor)(FspSiloMonitor);
|
CALL(PsUnregisterSiloMonitor)(FspSiloMonitor);
|
||||||
|
|
||||||
#if DBG
|
#if DBG
|
||||||
|
FsRtlEnterFileSystem();
|
||||||
ExAcquireFastMutexUnsafe(&FspSiloListMutex);
|
ExAcquireFastMutexUnsafe(&FspSiloListMutex);
|
||||||
ASSERT(IsListEmpty(&FspSiloList));
|
ASSERT(IsListEmpty(&FspSiloList));
|
||||||
ExReleaseFastMutexUnsafe(&FspSiloListMutex);
|
ExReleaseFastMutexUnsafe(&FspSiloListMutex);
|
||||||
|
FsRtlExitFileSystem();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
FspSiloMonitor = 0;
|
FspSiloMonitor = 0;
|
||||||
@ -372,6 +378,7 @@ VOID FspSiloEnumerate(FSP_SILO_ENUM_CALLBACK EnumFn)
|
|||||||
PLIST_ENTRY ListEntry;
|
PLIST_ENTRY ListEntry;
|
||||||
FSP_SILO_GLOBALS *Globals;
|
FSP_SILO_GLOBALS *Globals;
|
||||||
|
|
||||||
|
FsRtlEnterFileSystem();
|
||||||
ExAcquireFastMutexUnsafe(&FspSiloListMutex);
|
ExAcquireFastMutexUnsafe(&FspSiloListMutex);
|
||||||
|
|
||||||
if (!IsListEmpty(&FspSiloList))
|
if (!IsListEmpty(&FspSiloList))
|
||||||
@ -393,4 +400,5 @@ VOID FspSiloEnumerate(FSP_SILO_ENUM_CALLBACK EnumFn)
|
|||||||
}
|
}
|
||||||
|
|
||||||
ExReleaseFastMutexUnsafe(&FspSiloListMutex);
|
ExReleaseFastMutexUnsafe(&FspSiloListMutex);
|
||||||
|
FsRtlExitFileSystem();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user