From 4d1594b1cfbd0bdccc0b0df37f4ef179d680c2eb Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Sat, 1 Oct 2022 14:44:17 +0100 Subject: [PATCH] sys: silo: ensure FspSiloListMutex in critical region --- src/sys/silo.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/sys/silo.c b/src/sys/silo.c index d72ba1a4..73c3c0c2 100644 --- a/src/sys/silo.c +++ b/src/sys/silo.c @@ -207,6 +207,7 @@ static NTSTATUS NTAPI FspSiloMonitorCreateCallback(FSP_PESILO Silo) goto exit; Inserted = TRUE; + FsRtlEnterFileSystem(); ExAcquireFastMutexUnsafe(&FspSiloListMutex); if (0 != FspSiloInitCallback) @@ -220,6 +221,7 @@ static NTSTATUS NTAPI FspSiloMonitorCreateCallback(FSP_PESILO Silo) InsertTailList(&FspSiloList, &Globals->ListEntry); ExReleaseFastMutexUnsafe(&FspSiloListMutex); + FsRtlExitFileSystem(); exit: if (!NT_SUCCESS(Result)) @@ -256,6 +258,7 @@ static VOID NTAPI FspSiloMonitorTerminateCallback(FSP_PESILO Silo) if (!NT_SUCCESS(Result)) return; + FsRtlEnterFileSystem(); ExAcquireFastMutexUnsafe(&FspSiloListMutex); RemoveEntryList(&Globals->ListEntry); @@ -270,6 +273,7 @@ static VOID NTAPI FspSiloMonitorTerminateCallback(FSP_PESILO Silo) } ExReleaseFastMutexUnsafe(&FspSiloListMutex); + FsRtlExitFileSystem(); /* PsRemoveSiloContext removes reference to Globals (possibly freeing it) */ CALL(PsRemoveSiloContext)(Silo, ContextSlot, 0); @@ -355,9 +359,11 @@ VOID FspSiloFinalize(VOID) CALL(PsUnregisterSiloMonitor)(FspSiloMonitor); #if DBG + FsRtlEnterFileSystem(); ExAcquireFastMutexUnsafe(&FspSiloListMutex); ASSERT(IsListEmpty(&FspSiloList)); ExReleaseFastMutexUnsafe(&FspSiloListMutex); + FsRtlExitFileSystem(); #endif FspSiloMonitor = 0; @@ -372,6 +378,7 @@ VOID FspSiloEnumerate(FSP_SILO_ENUM_CALLBACK EnumFn) PLIST_ENTRY ListEntry; FSP_SILO_GLOBALS *Globals; + FsRtlEnterFileSystem(); ExAcquireFastMutexUnsafe(&FspSiloListMutex); if (!IsListEmpty(&FspSiloList)) @@ -393,4 +400,5 @@ VOID FspSiloEnumerate(FSP_SILO_ENUM_CALLBACK EnumFn) } ExReleaseFastMutexUnsafe(&FspSiloListMutex); + FsRtlExitFileSystem(); }