mirror of
https://github.com/reactos/reactos.git
synced 2024-10-05 00:43:21 +00:00
- Check if handle is re-used. Fixes double-freeing of handle & crash
svn path=/trunk/; revision=39956
This commit is contained in:
parent
da9027ac4f
commit
6d0e4470e0
|
@ -137,7 +137,7 @@ WdmAudControlOpen(
|
||||||
ACCESS_MASK DesiredAccess = 0;
|
ACCESS_MASK DesiredAccess = 0;
|
||||||
HANDLE PinHandle;
|
HANDLE PinHandle;
|
||||||
KSPIN_CONNECT * PinConnect;
|
KSPIN_CONNECT * PinConnect;
|
||||||
ULONG Length;
|
ULONG Length, Index;
|
||||||
KSDATAFORMAT_WAVEFORMATEX * DataFormat;
|
KSDATAFORMAT_WAVEFORMATEX * DataFormat;
|
||||||
ULONG FilterId;
|
ULONG FilterId;
|
||||||
ULONG PinId;
|
ULONG PinId;
|
||||||
|
@ -235,7 +235,20 @@ WdmAudControlOpen(
|
||||||
Status = KsSynchronousIoControlDevice(ClientInfo->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)InstanceInfo, Length, &PinHandle, sizeof(HANDLE), &BytesReturned);
|
Status = KsSynchronousIoControlDevice(ClientInfo->FileObject, KernelMode, IOCTL_KS_PROPERTY, (PVOID)InstanceInfo, Length, &PinHandle, sizeof(HANDLE), &BytesReturned);
|
||||||
if (NT_SUCCESS(Status))
|
if (NT_SUCCESS(Status))
|
||||||
{
|
{
|
||||||
PHANDLE Handels = ExAllocatePool(NonPagedPool, sizeof(HANDLE) * (ClientInfo->NumPins+1));
|
PHANDLE Handels;
|
||||||
|
|
||||||
|
for(Index = 0; Index < ClientInfo->NumPins; Index++)
|
||||||
|
{
|
||||||
|
if (ClientInfo->hPins[Index] == PinHandle)
|
||||||
|
{
|
||||||
|
/* the pin handle has been re-used */
|
||||||
|
DeviceInfo->hDevice = PinHandle;
|
||||||
|
return SetIrpIoStatus(Irp, Status, sizeof(WDMAUD_DEVICE_INFO));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Handels = ExAllocatePool(NonPagedPool, sizeof(HANDLE) * (ClientInfo->NumPins+1));
|
||||||
|
|
||||||
if (Handels)
|
if (Handels)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue