mirror of
https://github.com/FreeRTOS/FreeRTOS-Kernel.git
synced 2025-12-07 13:45:00 -05:00
CBMC: Add proof for vSocketBind (#202)
* Add proof * Update * Update MakefileCommon.json * Undo changes * Undo changes in MakefileCommon.json * Update Makefile.json * Update Makefile.json * Update Makefile.json * Change v1 * Change v2
This commit is contained in:
parent
1ae6eda77a
commit
6eba275f89
6 changed files with 286 additions and 0 deletions
|
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
"ENTRY": "vSocketBind",
|
||||||
|
"ALLOW_SEND_WITHOUT_BIND":"1",
|
||||||
|
"ALLOW_ETHERNET_DRIVER_FILTER":"1",
|
||||||
|
"ALLOW_TCP":"1",
|
||||||
|
"CBMCFLAGS":
|
||||||
|
[
|
||||||
|
"--unwind 1"
|
||||||
|
],
|
||||||
|
"OBJS":
|
||||||
|
[
|
||||||
|
"$(FREERTOS)/Source/list.goto",
|
||||||
|
"$(FREERTOS)/../FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.goto",
|
||||||
|
"$(ENTRY)_harness.goto"
|
||||||
|
],
|
||||||
|
"INSTFLAGS":
|
||||||
|
[
|
||||||
|
],
|
||||||
|
"DEF":
|
||||||
|
[
|
||||||
|
"ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND={ALLOW_SEND_WITHOUT_BIND}",
|
||||||
|
"ipconfigUSE_TCP={ALLOW_TCP}",
|
||||||
|
"ipconfigETHERNET_DRIVER_FILTERS_PACKETS={ALLOW_ETHERNET_DRIVER_FILTER}"
|
||||||
|
],
|
||||||
|
"INC":
|
||||||
|
[
|
||||||
|
"$(FREERTOS)/../FreeRTOS-Plus/Test/CBMC/include",
|
||||||
|
"$(FREERTOS)/../FreeRTOS-Plus/Test/CBMC/proofs/utility"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,68 @@
|
||||||
|
/* Standard includes. */
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* FreeRTOS includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "list.h"
|
||||||
|
|
||||||
|
/* FreeRTOS+TCP includes. */
|
||||||
|
#include "FreeRTOS_IP.h"
|
||||||
|
#include "FreeRTOS_IP_Private.h"
|
||||||
|
#include "FreeRTOS_Sockets.h"
|
||||||
|
|
||||||
|
#include "memory_assignments.c"
|
||||||
|
|
||||||
|
uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol );
|
||||||
|
|
||||||
|
|
||||||
|
uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol )
|
||||||
|
{
|
||||||
|
uint16_t usResult;
|
||||||
|
return usResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseType_t xIPIsNetworkTaskReady( void )
|
||||||
|
{
|
||||||
|
/* Return true saying that the task is ready. */
|
||||||
|
return pdTRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Random number generator provided by the application. In our case, CBMC provides
|
||||||
|
* an indeterministic value. */
|
||||||
|
BaseType_t xApplicationGetRandomNumber( uint32_t *pulNumber )
|
||||||
|
{
|
||||||
|
__CPROVER_assert( pulNumber != NULL, "Argument to xApplicationGetRandomNumber cannot be NULL" );
|
||||||
|
|
||||||
|
if( nondet_bool() )
|
||||||
|
{
|
||||||
|
*pulNumber = nondet_uint32_t();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*pulNumber = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void harness()
|
||||||
|
{
|
||||||
|
FreeRTOS_Socket_t *pxSocket = ensure_FreeRTOS_Socket_t_is_allocated();
|
||||||
|
|
||||||
|
__CPROVER_assume( pxSocket != NULL );
|
||||||
|
__CPROVER_assume( pxSocket != FREERTOS_INVALID_SOCKET );
|
||||||
|
|
||||||
|
struct freertos_sockaddr * pxBindAddress = safeMalloc( sizeof( struct freertos_sockaddr ) );
|
||||||
|
|
||||||
|
/* uxAddressLength is not used in this implementation. */
|
||||||
|
size_t uxAddressLength;
|
||||||
|
|
||||||
|
BaseType_t xInternal;
|
||||||
|
|
||||||
|
/* Call to init the socket list. */
|
||||||
|
vNetworkSocketsInit();
|
||||||
|
|
||||||
|
vSocketBind( pxSocket, pxBindAddress, uxAddressLength, xInternal );
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"ENTRY": "vSocketBind",
|
||||||
|
"ALLOW_SEND_WITHOUT_BIND":"1",
|
||||||
|
"CBMCFLAGS":
|
||||||
|
[
|
||||||
|
"--unwind 1"
|
||||||
|
],
|
||||||
|
"OBJS":
|
||||||
|
[
|
||||||
|
"$(FREERTOS)/Source/list.goto",
|
||||||
|
"$(FREERTOS)/../FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.goto",
|
||||||
|
"$(ENTRY)_harness.goto"
|
||||||
|
],
|
||||||
|
"INSTFLAGS":
|
||||||
|
[
|
||||||
|
],
|
||||||
|
"DEF":
|
||||||
|
[
|
||||||
|
"ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND={ALLOW_SEND_WITHOUT_BIND}",
|
||||||
|
"ipconfigUSE_TCP=1"
|
||||||
|
],
|
||||||
|
"INC":
|
||||||
|
[
|
||||||
|
"$(FREERTOS)/../FreeRTOS-Plus/Test/CBMC/include",
|
||||||
|
"$(FREERTOS)/../FreeRTOS-Plus/Test/CBMC/proofs/utility"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,65 @@
|
||||||
|
/* Standard includes. */
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* FreeRTOS includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "list.h"
|
||||||
|
|
||||||
|
/* FreeRTOS+TCP includes. */
|
||||||
|
#include "FreeRTOS_IP.h"
|
||||||
|
#include "FreeRTOS_IP_Private.h"
|
||||||
|
#include "FreeRTOS_Sockets.h"
|
||||||
|
|
||||||
|
#include "memory_assignments.c"
|
||||||
|
|
||||||
|
uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol )
|
||||||
|
{
|
||||||
|
uint16_t usResult;
|
||||||
|
return usResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseType_t xIPIsNetworkTaskReady( void )
|
||||||
|
{
|
||||||
|
/* Return true saying that the task is ready. */
|
||||||
|
return pdTRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Random number generator provided by the application. In our case, CBMC provides
|
||||||
|
* an indeterministic value. */
|
||||||
|
BaseType_t xApplicationGetRandomNumber( uint32_t *pulNumber )
|
||||||
|
{
|
||||||
|
__CPROVER_assert( pulNumber != NULL, "Argument to xApplicationGetRandomNumber cannot be NULL" );
|
||||||
|
|
||||||
|
if( nondet_bool() )
|
||||||
|
{
|
||||||
|
*pulNumber = nondet_uint32_t();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*pulNumber = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void harness()
|
||||||
|
{
|
||||||
|
FreeRTOS_Socket_t *pxSocket = ensure_FreeRTOS_Socket_t_is_allocated();
|
||||||
|
|
||||||
|
__CPROVER_assume( pxSocket != NULL );
|
||||||
|
__CPROVER_assume( pxSocket != FREERTOS_INVALID_SOCKET );
|
||||||
|
|
||||||
|
struct freertos_sockaddr * pxBindAddress = safeMalloc( sizeof( struct freertos_sockaddr ) );
|
||||||
|
|
||||||
|
/* uxAddressLength is not used in this implementation. */
|
||||||
|
size_t uxAddressLength;
|
||||||
|
|
||||||
|
BaseType_t xInternal;
|
||||||
|
|
||||||
|
/* Call to init the socket list. */
|
||||||
|
vNetworkSocketsInit();
|
||||||
|
|
||||||
|
vSocketBind( pxSocket, pxBindAddress, uxAddressLength, xInternal );
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
{
|
||||||
|
"ENTRY": "vSocketBind",
|
||||||
|
"ALLOW_SEND_WITHOUT_BIND":"0",
|
||||||
|
"CBMCFLAGS":
|
||||||
|
[
|
||||||
|
"--unwind 1"
|
||||||
|
],
|
||||||
|
"OBJS":
|
||||||
|
[
|
||||||
|
"$(FREERTOS)/Source/list.goto",
|
||||||
|
"$(FREERTOS)/../FreeRTOS-Plus/Source/FreeRTOS-Plus-TCP/FreeRTOS_Sockets.goto",
|
||||||
|
"$(ENTRY)_harness.goto"
|
||||||
|
],
|
||||||
|
"INSTFLAGS":
|
||||||
|
[
|
||||||
|
],
|
||||||
|
"DEF":
|
||||||
|
[
|
||||||
|
"ipconfigALLOW_SOCKET_SEND_WITHOUT_BIND={ALLOW_SEND_WITHOUT_BIND}",
|
||||||
|
"ipconfigUSE_TCP=1"
|
||||||
|
],
|
||||||
|
"INC":
|
||||||
|
[
|
||||||
|
"$(FREERTOS)/../FreeRTOS-Plus/Test/CBMC/include",
|
||||||
|
"$(FREERTOS)/../FreeRTOS-Plus/Test/CBMC/proofs/utility"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
@ -0,0 +1,66 @@
|
||||||
|
/* Standard includes. */
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
/* FreeRTOS includes. */
|
||||||
|
#include "FreeRTOS.h"
|
||||||
|
#include "list.h"
|
||||||
|
|
||||||
|
/* FreeRTOS+TCP includes. */
|
||||||
|
#include "FreeRTOS_IP.h"
|
||||||
|
#include "FreeRTOS_IP_Private.h"
|
||||||
|
#include "FreeRTOS_Sockets.h"
|
||||||
|
|
||||||
|
#include "memory_assignments.c"
|
||||||
|
|
||||||
|
uint16_t prvGetPrivatePortNumber( BaseType_t xProtocol )
|
||||||
|
{
|
||||||
|
uint16_t usResult;
|
||||||
|
return usResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
BaseType_t xIPIsNetworkTaskReady( void )
|
||||||
|
{
|
||||||
|
/* Return true saying that the task is ready. */
|
||||||
|
return pdTRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Random number generator provided by the application. In our case, CBMC provides
|
||||||
|
* an indeterministic value. */
|
||||||
|
BaseType_t xApplicationGetRandomNumber( uint32_t *pulNumber )
|
||||||
|
{
|
||||||
|
__CPROVER_assert( pulNumber != NULL, "Argument to xApplicationGetRandomNumber cannot be NULL" );
|
||||||
|
|
||||||
|
if( nondet_bool() )
|
||||||
|
{
|
||||||
|
*pulNumber = nondet_uint32_t();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
*pulNumber = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void harness()
|
||||||
|
{
|
||||||
|
FreeRTOS_Socket_t *pxSocket = ensure_FreeRTOS_Socket_t_is_allocated();
|
||||||
|
|
||||||
|
__CPROVER_assume( pxSocket != NULL );
|
||||||
|
__CPROVER_assume( pxSocket != FREERTOS_INVALID_SOCKET );
|
||||||
|
|
||||||
|
/* malloc instead of safeMalloc since we do not allow socket without binding. */
|
||||||
|
struct freertos_sockaddr * pxBindAddress = malloc( sizeof( struct freertos_sockaddr ) );
|
||||||
|
|
||||||
|
/* uxAddressLength is not used in this implementation. */
|
||||||
|
size_t uxAddressLength;
|
||||||
|
|
||||||
|
BaseType_t xInternal;
|
||||||
|
|
||||||
|
/* Call to init the socket list. */
|
||||||
|
vNetworkSocketsInit();
|
||||||
|
|
||||||
|
vSocketBind( pxSocket, pxBindAddress, uxAddressLength, xInternal );
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue