Recent Commits to VeraCrypt:master

  • 07/09/2025 23:40

    Windows driver fix: Decrement IoThreadPendingRequestCount on allocati…

    Windows driver fix: Decrement IoThreadPendingRequestCount on allocation failure in MainThreadProc
    
    Added InterlockedDecrement in the error path when GetPoolBuffer fails for EncryptedIoRequest to ensure accurate tracking of pending IO requests and prevent potential resource leaks.
  • 07/09/2025 23:38

    Windows driver: remove unneeded __try/__finally

    Windows driver: remove unneeded __try/__finally
  • 07/09/2025 22:36

    Windows driver: harden UpdateBuffer against integer overflow. Make co…

    Windows driver: harden UpdateBuffer against integer overflow. Make completion backoff per request (no shared state)
  • 07/09/2025 11:58

    Windows driver: overhaul IRP completion path in EncryptedIoQueue, add…

    Windows driver: overhaul IRP completion path in EncryptedIoQueue, add dual completion threads, precise byte accounting & safer UpdateBuffer
    
    Major changes:
    - Added pooled + elastic work item model with retry/backoff (MAX_WI_RETRIES). removed semaphore usage.
    - Introduced two completion threads to reduce contention and latency under heavy IO.
    - Added BytesCompleted (per IRP) and ActualBytes (per fragment) for correct short read/write accounting. total read/write stats now reflect real transferred bytes instead of requested length.
    - Moved decryption of read fragments into IO thread. completion threads now only finalize IRPs (reduces race window and simplifies flow).
    - Deferred final IRP completion via FinalizeOriginalIrp to avoid inline IoCompleteRequest re-entrancy. added safe OOM inline fallback.
    - Implemented work item pool drain & orderly shutdown (ActiveWorkItems + NoActiveWorkItemsEvent) with robust stop protocol.
    - Replaced semaphore-based work item acquisition with spin lock + free list + event (WorkItemAvailableEvent). added exponential backoff for transient exhaustion.
    - Added elastic (on-demand) work item allocation with pool vs dynamic origin tracking (FromPool).
    - Added FreeCompletionWorkItemPool() for symmetric cleanup; ensured all threads are explicitly awakened during stop.
    - Added second completion thread replacing single CompletionThread.
    - Hardened UpdateBuffer: fixed parameter name typo, added bounds/overflow checks using IntSafe (ULongLongAdd), validated Count, guarded sector end computation.
    - Fixed GPT/system region write protection logic to pass correct length instead of end offset.
    - Ensured ASSERTs use fragment‑relative bounds (cast + length) and avoided mixed 64/32 comparisons.
    - Added MAX_WI_RETRIES constant. added WiRetryCount field in EncryptedIoRequest.
    - Ensured RemoveLock is released only after all queue/accounting updates (OnItemCompleted).
    - Reset/read-ahead logic preserved. read-ahead trigger now based on actual completion & zero pending fragment count.
    - General refactoring, clearer separation of concerns (TryAcquireCompletionWorkItem / FinalizeOriginalIrp / HandleCompleteOriginalIrp).
    
    Safety / correctness improvements:
    - Accurate short read handling (STATUS_END_OF_FILE with true byte count).
    - Eliminated risk of double free or premature RemoveLock release on completion paths.
    - Prevented potential overflow in sector end arithmetic.
    - Reduced contention and potential deadlock scenarios present with previous semaphore wait path.

Log in