From 5e4e012cf8eaf19caa38af0d6aa273e9e4046631 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 10 May 2009 21:43:55 +0000 Subject: [PATCH] - Allocate space for the packet extension located at NdisPacketOobOffset + sizeof(NDIS_PACKET_OOB_DATA) - Fixes more packet corruption svn path=/trunk/; revision=40880 --- reactos/drivers/network/ndis/ndis/buffer.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/reactos/drivers/network/ndis/ndis/buffer.c b/reactos/drivers/network/ndis/ndis/buffer.c index 18eb64c1d77..62d557fdaa1 100644 --- a/reactos/drivers/network/ndis/ndis/buffer.c +++ b/reactos/drivers/network/ndis/ndis/buffer.c @@ -428,7 +428,9 @@ NdisAllocatePacket( Temp->Private.Pool = Pool; Temp->Private.ValidCounts = TRUE; Temp->Private.NdisPacketFlags = fPACKET_ALLOCATED_BY_NDIS; - Temp->Private.NdisPacketOobOffset = Pool->PacketLength - sizeof(NDIS_PACKET_OOB_DATA); + Temp->Private.NdisPacketOobOffset = Pool->PacketLength - + (sizeof(NDIS_PACKET_OOB_DATA) + + sizeof(NDIS_PACKET_EXTENSION)); *Packet = Temp; *Status = NDIS_STATUS_SUCCESS; @@ -507,7 +509,8 @@ NdisAllocatePacketPoolEx( NumberOfDescriptors = 0xffff; } - Length = sizeof(NDIS_PACKET) + sizeof(NDIS_PACKET_OOB_DATA) + ProtocolReservedLength; + Length = sizeof(NDIS_PACKET) + sizeof(NDIS_PACKET_OOB_DATA) + + sizeof(NDIS_PACKET_EXTENSION) + ProtocolReservedLength; Size = sizeof(NDISI_PACKET_POOL) + Length * NumberOfDescriptors; Pool = ExAllocatePool(NonPagedPool, Size); @@ -712,7 +715,9 @@ NdisDprAllocatePacket( Temp->Private.Pool = Pool; Temp->Private.ValidCounts = TRUE; Temp->Private.NdisPacketFlags = fPACKET_ALLOCATED_BY_NDIS; - Temp->Private.NdisPacketOobOffset = Pool->PacketLength - sizeof(NDIS_PACKET_OOB_DATA); + Temp->Private.NdisPacketOobOffset = Pool->PacketLength - + (sizeof(NDIS_PACKET_OOB_DATA) + + sizeof(NDIS_PACKET_EXTENSION)); *Packet = Temp; *Status = NDIS_STATUS_SUCCESS; @@ -762,7 +767,9 @@ NdisDprAllocatePacketNonInterlocked( Temp->Private.Pool = Pool; Temp->Private.ValidCounts = TRUE; Temp->Private.NdisPacketFlags = fPACKET_ALLOCATED_BY_NDIS; - Temp->Private.NdisPacketOobOffset = Pool->PacketLength - sizeof(NDIS_PACKET_OOB_DATA); + Temp->Private.NdisPacketOobOffset = Pool->PacketLength - + (sizeof(NDIS_PACKET_OOB_DATA) + + sizeof(NDIS_PACKET_EXTENSION)); *Packet = Temp; *Status = NDIS_STATUS_SUCCESS;