Skip to content

Commit

Permalink
do not let through unicast packets on inactive endpoints (FreeRTOS#1186)
Browse files Browse the repository at this point in the history
* do not let through unicast packets on inactive endpoints

* Modified test_FreeRTOS_FindEndPointOnIP_IPv4_ZeroAddressEndpoint()

* Fix unit tests

* Fix link verification check

---------

Co-authored-by: Tony Josi <[email protected]>
  • Loading branch information
AlfaSegato and tony-josi-aws authored Sep 30, 2024
1 parent 875bfd2 commit fa073ea
Show file tree
Hide file tree
Showing 6 changed files with 17 additions and 15 deletions.
4 changes: 1 addition & 3 deletions source/FreeRTOS_IPv4.c
Original file line number Diff line number Diff line change
Expand Up @@ -321,9 +321,7 @@ enum eFrameProcessingResult prvAllowIPPacketIPv4( const struct xIP_PACKET * cons
( FreeRTOS_FindEndPointOnIP_IPv4( ulDestinationIPAddress ) == NULL ) &&
/* Is it an IPv4 broadcast address x.x.x.255 ? */
( ( FreeRTOS_ntohl( ulDestinationIPAddress ) & 0xffU ) != 0xffU ) &&
( xIsIPv4Multicast( ulDestinationIPAddress ) == pdFALSE ) &&
/* Or (during DHCP negotiation) we have no IP-address yet? */
( FreeRTOS_IsNetworkUp() != pdFALSE ) )
( xIsIPv4Multicast( ulDestinationIPAddress ) == pdFALSE ) )
{
/* Packet is not for this node, release it */
eReturn = eReleaseBuffer;
Expand Down
1 change: 0 additions & 1 deletion source/FreeRTOS_Routing.c
Original file line number Diff line number Diff line change
Expand Up @@ -388,7 +388,6 @@ struct xIPv6_Couple
#endif
{
if( ( ulIPAddress == 0U ) ||
( pxEndPoint->ipv4_settings.ulIPAddress == 0U ) ||
( pxEndPoint->ipv4_settings.ulIPAddress == ulIPAddress ) )
{
break;
Expand Down
2 changes: 1 addition & 1 deletion source/portable/NetworkInterface/RX/NetworkInterface.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
* https://www.renesas.com/en/document/oth/disclaimer8
*
* Copyright (C) 2020 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
Expand Down
2 changes: 1 addition & 1 deletion source/portable/NetworkInterface/RX/ether_callback.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
* Renesas reserves the right, without notice, to make changes to this software and to discontinue the availability of
* this software. By using this software, you agree to the additional terms and conditions found by accessing the
* following link:
* http://www.renesas.com/disclaimer
* https://www.renesas.com/en/document/oth/disclaimer8
*
* Copyright (C) 2015 Renesas Electronics Corporation. All rights reserved.
***********************************************************************************************************************/
Expand Down
3 changes: 0 additions & 3 deletions test/unit-test/FreeRTOS_IPv4/FreeRTOS_IPv4_utest.c
Original file line number Diff line number Diff line change
Expand Up @@ -262,7 +262,6 @@ void test_prvAllowIPPacketIPv4_NotMatchingIP( void )
pxIPHeader->ulDestinationIPAddress = pxEndpoint->ipv4_settings.ulIPAddress + 1;

FreeRTOS_FindEndPointOnIP_IPv4_ExpectAnyArgsAndReturn( NULL ); /* From prvAllowIPPacketIPv4() */
FreeRTOS_IsNetworkUp_ExpectAndReturn( pdTRUE );

eResult = prvAllowIPPacketIPv4( pxIPPacket, pxNetworkBuffer, uxHeaderLength );

Expand Down Expand Up @@ -417,7 +416,6 @@ void test_prvAllowIPPacketIPv4_SourceIPBrdCast_NoLocalIP( void )


FreeRTOS_FindEndPointOnIP_IPv4_ExpectAnyArgsAndReturn( NULL ); /* From prvAllowIPPacketIPv4() */
FreeRTOS_IsNetworkUp_ExpectAndReturn( pdFALSE );

eResult = prvAllowIPPacketIPv4( pxIPPacket, pxNetworkBuffer, uxHeaderLength );

Expand Down Expand Up @@ -455,7 +453,6 @@ void test_prvAllowIPPacketIPv4_DestMACBrdCast_DestIPUnicast( void )


FreeRTOS_FindEndPointOnIP_IPv4_ExpectAnyArgsAndReturn( NULL ); /* From prvAllowIPPacketIPv4() */
FreeRTOS_IsNetworkUp_ExpectAndReturn( pdTRUE );

eResult = prvAllowIPPacketIPv4( pxIPPacket, pxNetworkBuffer, uxHeaderLength );

Expand Down
20 changes: 14 additions & 6 deletions test/unit-test/FreeRTOS_Routing/FreeRTOS_Routing_utest.c
Original file line number Diff line number Diff line change
Expand Up @@ -1440,25 +1440,33 @@ void test_FreeRTOS_FindEndPointOnIP_IPv4_AnyEndpoint( void )
* pxNetworkEndPoints is a global variable using in FreeRTOS_Routing as link list head of all endpoints.
*
* Test step:
* - Create 1 endpoint with IP address 0 and add it to the list.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with IPV4_DEFAULT_ADDRESS.
* - Create 1 endpoint with IP address 0xAB12CD34 and add it to the list.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with 0xAB12CD34.
* - Check if returned endpoint is same.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with IPV4_DEFAULT_GATEWAY.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with 0.
* - Check if returned endpoint is same.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with IPV4_DEFAULT_ADDRESS.
* - Check if returned endpoint is NULL.
* - Call FreeRTOS_FindEndPointOnIP_IPv4 to query with IPV4_DEFAULT_GATEWAY.
* - Check if returned endpoint is NULL.
*/
void test_FreeRTOS_FindEndPointOnIP_IPv4_ZeroAddressEndpoint( void )
{
NetworkEndPoint_t xEndPoint;
NetworkEndPoint_t * pxEndPoint = NULL;

memset( &xEndPoint, 0, sizeof( NetworkEndPoint_t ) );
xEndPoint.ipv4_settings.ulIPAddress = 0;
xEndPoint.ipv4_settings.ulIPAddress = 0xAB12CD34;
pxNetworkEndPoints = &xEndPoint;

pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( IPV4_DEFAULT_ADDRESS );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( 0xAB12CD34 );
TEST_ASSERT_EQUAL( &xEndPoint, pxEndPoint );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( IPV4_DEFAULT_GATEWAY );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( 0 );
TEST_ASSERT_EQUAL( &xEndPoint, pxEndPoint );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( IPV4_DEFAULT_ADDRESS );
TEST_ASSERT_EQUAL( NULL, pxEndPoint );
pxEndPoint = FreeRTOS_FindEndPointOnIP_IPv4( IPV4_DEFAULT_GATEWAY );
TEST_ASSERT_EQUAL( NULL, pxEndPoint );
}

/**
Expand Down

0 comments on commit fa073ea

Please sign in to comment.