diff options
| author | DHarper89936 <[email protected]> | 2019-08-26 11:16:03 -0700 |
|---|---|---|
| committer | Adonais Romero González <[email protected]> | 2019-08-26 11:16:03 -0700 |
| commit | 45ffe35cb1f098cc25c68bd521b68af34cc354cc (patch) | |
| tree | 3cc6111064e8c94de5fdc3879213dee6bb7d22bd /network/trans/WFPSampler/syslib/HelperFunctions_WorkItems.cpp | |
| parent | 4057314f5582f76ece8f97b236014f462e505f21 (diff) | |
Fix potential deadlock due to unregistering callouts during a PowerState callback (#408)79745
Moves the unregister of callouts into a workitem routine. Additionally fixed an issue which could potentially leak an IOWorkItem
Diffstat (limited to 'network/trans/WFPSampler/syslib/HelperFunctions_WorkItems.cpp')
| -rw-r--r-- | network/trans/WFPSampler/syslib/HelperFunctions_WorkItems.cpp | 65 |
1 files changed, 50 insertions, 15 deletions
diff --git a/network/trans/WFPSampler/syslib/HelperFunctions_WorkItems.cpp b/network/trans/WFPSampler/syslib/HelperFunctions_WorkItems.cpp index 4c47f3b3..23f4a6df 100644 --- a/network/trans/WFPSampler/syslib/HelperFunctions_WorkItems.cpp +++ b/network/trans/WFPSampler/syslib/HelperFunctions_WorkItems.cpp @@ -843,9 +843,16 @@ NTSTATUS KrnlHlprWorkItemQueue(_In_ PDEVICE_OBJECT pWDMDevice, HLPR_BAIL_LABEL: - if(status != STATUS_SUCCESS && - pWorkItemData) - KrnlHlprWorkItemDataDestroy(&pWorkItemData); + if(status != STATUS_SUCCESS) + { + if(pWorkItemData) + KrnlHlprWorkItemDataDestroy(&pWorkItemData); + else + { + if(pIOWorkItem) + IoFreeWorkItem(pIOWorkItem); + } + } #if DBG @@ -929,9 +936,16 @@ NTSTATUS KrnlHlprWorkItemQueue(_In_ PDEVICE_OBJECT pWDMDevice, HLPR_BAIL_LABEL: - if(status != STATUS_SUCCESS && - pWorkItemData) - KrnlHlprWorkItemDataDestroy(&pWorkItemData); + if(status != STATUS_SUCCESS) + { + if(pWorkItemData) + KrnlHlprWorkItemDataDestroy(&pWorkItemData); + else + { + if(pIOWorkItem) + IoFreeWorkItem(pIOWorkItem); + } + } #if DBG @@ -1015,9 +1029,16 @@ NTSTATUS KrnlHlprWorkItemQueue(_In_ PDEVICE_OBJECT pWDMDevice, HLPR_BAIL_LABEL: - if(status != STATUS_SUCCESS && - pWorkItemData) - KrnlHlprWorkItemDataDestroy(&pWorkItemData); + if(status != STATUS_SUCCESS) + { + if(pWorkItemData) + KrnlHlprWorkItemDataDestroy(&pWorkItemData); + else + { + if(pIOWorkItem) + IoFreeWorkItem(pIOWorkItem); + } + } #if DBG @@ -1098,9 +1119,16 @@ NTSTATUS KrnlHlprWorkItemQueue(_In_ PDEVICE_OBJECT pWDMDevice, HLPR_BAIL_LABEL: - if(status != STATUS_SUCCESS && - pWorkItemData) - KrnlHlprWorkItemDataDestroy(&pWorkItemData); + if(status != STATUS_SUCCESS) + { + if(pWorkItemData) + KrnlHlprWorkItemDataDestroy(&pWorkItemData); + else + { + if(pIOWorkItem) + IoFreeWorkItem(pIOWorkItem); + } + } #if DBG @@ -1181,9 +1209,16 @@ NTSTATUS KrnlHlprWorkItemQueue(_In_ PDEVICE_OBJECT pWDMDevice, HLPR_BAIL_LABEL: - if(status != STATUS_SUCCESS && - pWorkItemData) - KrnlHlprWorkItemDataDestroy(&pWorkItemData); + if(status != STATUS_SUCCESS) + { + if(pWorkItemData) + KrnlHlprWorkItemDataDestroy(&pWorkItemData); + else + { + if(pIOWorkItem) + IoFreeWorkItem(pIOWorkItem); + } + } #if DBG |
