From 3137d36d9a29ed55be5837abf1be3f959f831abc Mon Sep 17 00:00:00 2001 From: Mounir IDRASSI Date: Mon, 14 Jul 2014 16:59:14 +0200 Subject: Static Code Analysis : Use Safe string functions inside VeraCrypt Device Driver to avoid potential security issues. Add many checks for NULL pointers to handle low memory use cases. --- src/Driver/EncryptedIoQueue.c | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'src/Driver/EncryptedIoQueue.c') diff --git a/src/Driver/EncryptedIoQueue.c b/src/Driver/EncryptedIoQueue.c index 7cf48cd6..bb76a0f5 100644 --- a/src/Driver/EncryptedIoQueue.c +++ b/src/Driver/EncryptedIoQueue.c @@ -510,6 +510,15 @@ static VOID MainThreadProc (PVOID threadArg) KeWaitForSingleObject (&queue->QueueResumedEvent, Executive, KernelMode, FALSE, NULL); item = GetPoolBuffer (queue, sizeof (EncryptedIoQueueItem)); + if (!item) + { + TCCompleteDiskIrp (irp, STATUS_INSUFFICIENT_RESOURCES, 0); + DecrementOutstandingIoCount (queue); + IoReleaseRemoveLock (&queue->RemoveLock, irp); + + continue; + } + item->Queue = queue; item->OriginalIrp = irp; item->Status = STATUS_SUCCESS; @@ -687,6 +696,11 @@ static VOID MainThreadProc (PVOID threadArg) // Create IO request request = GetPoolBuffer (queue, sizeof (EncryptedIoRequest)); + if (!request) + { + CompleteOriginalIrp (item, STATUS_INSUFFICIENT_RESOURCES, 0); + break; + } request->Item = item; request->CompleteOriginalIrp = isLastFragment; request->Offset = fragmentOffset; -- cgit v1.2.3