Skip to content

Commit 163ae3f

Browse files
Avoid network buffer leak in FreeRTOS_ND.c (#1074)
* Avoid network buffer leak in FreeRTOS_ND.c * Updat unit tests --------- Co-authored-by: Tony Josi <[email protected]>
1 parent bedefe0 commit 163ae3f

File tree

2 files changed

+11
-0
lines changed

2 files changed

+11
-0
lines changed

source/FreeRTOS_ND.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -592,6 +592,7 @@
592592
MACAddress_t xMultiCastMacAddress;
593593
NetworkBufferDescriptor_t * pxDescriptor = pxNetworkBuffer;
594594
NetworkBufferDescriptor_t * pxNewDescriptor = NULL;
595+
BaseType_t xReleased = pdFALSE;
595596

596597
if( ( pxEndPoint != NULL ) && ( pxEndPoint->bits.bIPv6 != pdFALSE_UNSIGNED ) )
597598
{
@@ -675,8 +676,14 @@
675676

676677
/* This function will fill in the eth addresses and send the packet */
677678
vReturnEthernetFrame( pxDescriptor, pdTRUE );
679+
xReleased = pdTRUE;
678680
}
679681
}
682+
683+
if( ( pxDescriptor != NULL ) && ( xReleased == pdFALSE ) )
684+
{
685+
vReleaseNetworkBufferAndDescriptor( pxDescriptor );
686+
}
680687
}
681688
/*-----------------------------------------------------------*/
682689

test/unit-test/FreeRTOS_ND/FreeRTOS_ND_utest.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -690,6 +690,7 @@ void test_vNDAgeCache_NSNullEP( void )
690690
xNDCache[ xUseEntry ].pxEndPoint = NULL;
691691

692692
pxGetNetworkBufferWithDescriptor_ExpectAnyArgsAndReturn( &xNetworkBuffer );
693+
vReleaseNetworkBufferAndDescriptor_Expect( &xNetworkBuffer );
693694

694695
vNDAgeCache();
695696

@@ -814,6 +815,8 @@ void test_vNDSendNeighbourSolicitation_NULL_EP( void )
814815

815816
xNetworkBuffer.pxEndPoint = NULL;
816817

818+
vReleaseNetworkBufferAndDescriptor_Expect( &xNetworkBuffer );
819+
817820
vNDSendNeighbourSolicitation( &xNetworkBuffer, &xIPAddress );
818821
}
819822

@@ -830,6 +833,7 @@ void test_vNDSendNeighbourSolicitation_bIPv6_NotSet( void )
830833
xEndPoint.bits.bIPv6 = pdFALSE;
831834
xNetworkBuffer.pxEndPoint = &xEndPoint;
832835

836+
vReleaseNetworkBufferAndDescriptor_Expect( &xNetworkBuffer );
833837

834838
vNDSendNeighbourSolicitation( &xNetworkBuffer, &xIPAddress );
835839
}

0 commit comments

Comments
 (0)