Compare commits

...
2 Commits
Author SHA1 Message Date
Bill Zissimopoulos e3ecc89bb7 build: version 2026 Beta3 2026-07-13 12:23:41 +03:00
Bill Zissimopoulos 83aa54b4ab sys: FspFsvolWriteCached: move CcCanIWrite outside the locks
This eliminates the deadlock described in PR #677 while at the same time
ensuring that CcDeferWrite is called after the file's cache map has been
initialized.
2026-07-11 14:05:26 +03:00
3 changed files with 26 additions and 3 deletions
+19
View File
@@ -1,6 +1,25 @@
# Changelog # Changelog
## v2.2B3 (2026 Beta3)
- [FIX] Fixes vulnerability CVE-2026-3006 discovered by Tay Kiat Loong (GitHub: @Owl4444).
- [FIX] Fixes vulnerability CVE-2026-7162 discovered by Tay Kiat Loong (GitHub: @Owl4444) and uhg (GitHub: @UltimateHG).
- [FIX] Fixes deadlock during cached writes under memory pressure. See PR #677 for discussion.
- [FIX] Fixes deadlock in the file system notification mechanism with concurrent renames. See fix PR #669 by @yeonsh and test PR #672 by @Maksim-Isakau.
- [FIX] The WinFsp Network Provider provides improved shell support for network file systems not managed by the Launcher. See commit f021496.
- [FUSE] Add FUSE option `FlushOnCleanup`. See PR #614 by @chenjie4255.
- [FUSE] FUSE now respects the `direct_io` flag. See PR #646 by @chenjie4255.
- [FUSE] Add FUSE option `AddWriteEaAccess`. See PR #648 by @chenjie4255.
## v2.2B2 (2026 Beta2) ## v2.2B2 (2026 Beta2)
- [FIX] Fixes vulnerability CVE-2026-3006 discovered by Tay Kiat Loong (GitHub: @Owl4444). - [FIX] Fixes vulnerability CVE-2026-3006 discovered by Tay Kiat Loong (GitHub: @Owl4444).
+1 -1
View File
@@ -20,7 +20,7 @@
<MyCanonicalVersion>2.2</MyCanonicalVersion> <MyCanonicalVersion>2.2</MyCanonicalVersion>
<MyProductVersion>2026 Beta2</MyProductVersion> <MyProductVersion>2026 Beta3</MyProductVersion>
<MyProductStage>Beta</MyProductStage> <MyProductStage>Beta</MyProductStage>
<MyCrossCert>CrossCert.cer</MyCrossCert> <MyCrossCert>CrossCert.cer</MyCrossCert>
+6 -2
View File
@@ -247,8 +247,13 @@ static NTSTATUS FspFsvolWriteCached(
FILE_END_OF_FILE_INFORMATION EndOfFileInformation; FILE_END_OF_FILE_INFORMATION EndOfFileInformation;
UINT64 WriteEndOffset; UINT64 WriteEndOffset;
BOOLEAN ExtendingFile; BOOLEAN ExtendingFile;
BOOLEAN DeferWrite;
BOOLEAN Success; BOOLEAN Success;
/* should we defer the write? */
Success = DEBUGTEST(90) && CcCanIWrite(FileObject, WriteLength, CanWait, Retrying);
DeferWrite = !Success;
/* try to acquire the FileNode Main exclusive */ /* try to acquire the FileNode Main exclusive */
Success = DEBUGTEST(90) && Success = DEBUGTEST(90) &&
FspFileNodeTryAcquireExclusiveF(FileNode, FspFileNodeAcquireMain, CanWait); FspFileNodeTryAcquireExclusiveF(FileNode, FspFileNodeAcquireMain, CanWait);
@@ -306,8 +311,7 @@ static NTSTATUS FspFsvolWriteCached(
} }
/* should we defer the write? */ /* should we defer the write? */
Success = DEBUGTEST(90) && CcCanIWrite(FileObject, WriteLength, CanWait, Retrying); if (DeferWrite)
if (!Success)
{ {
Result = FspWqCreateIrpWorkItem(Irp, FspFsvolWriteCached, 0); Result = FspWqCreateIrpWorkItem(Irp, FspFsvolWriteCached, 0);
if (NT_SUCCESS(Result)) if (NT_SUCCESS(Result))