1# The proof depends on one parameter: 2# BUFFER_SIZE is the size of the buffer being parsed 3# The buffer size must be bounded because we must bound the number of 4# iterations loops iterating over the buffer. 5 6{ 7 "ENTRY": "ProcessDHCPReplies", 8 9################################################################ 10# Buffer header: sizeof(DHCPMessage_t) = 241 11# Buffer header: sizeof(DHCPMessage_IPv4_t) = 240 12 "BUFFER_HEADER": 240, 13 "ENDPOINT_DNS_ADDRESS_COUNT": 5, 14 15################################################################ 16# Buffer size 17# Reasonable sizes are BUFFER_SIZE > BUFFER_HEADER 18# Sizes smaller than this causes CBMC to fail in simplify_byte_extract 19 "BUFFER_SIZE": 252, 20 21################################################################ 22# Buffer payload 23 "BUFFER_PAYLOAD": "__eval 1 if {BUFFER_SIZE} <= {BUFFER_HEADER} else {BUFFER_SIZE} - {BUFFER_HEADER} + 1", 24 "ENDPOINT_DNS_ADDRESS_COUNT_UNWIND": "__eval {ENDPOINT_DNS_ADDRESS_COUNT} + 1", 25 26################################################################ 27 28 "CBMCFLAGS": [ 29 # "--nondet-static", 30 "--unwind 1", 31 "--unwindset __CPROVER_file_local_FreeRTOS_DHCP_c_vProcessHandleOption.0:{ENDPOINT_DNS_ADDRESS_COUNT_UNWIND}", 32 "--unwindset __CPROVER_file_local_FreeRTOS_DHCP_c_vProcessHandleOption.1:{ENDPOINT_DNS_ADDRESS_COUNT_UNWIND}", 33 "--unwindset memcmp.0:7,__CPROVER_file_local_FreeRTOS_DHCP_c_prvProcessDHCPReplies.0:{BUFFER_PAYLOAD}" 34 ], 35 "OPT": 36 [ 37 "--export-file-local-symbols" 38 ], 39 "OBJS": 40 [ 41 "$(ENTRY)_harness.goto", 42 "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/cbmc.goto", 43 "$(FREERTOS_PLUS_TCP)/test/cbmc/stubs/freertos_api.goto", 44 "$(FREERTOS_PLUS_TCP)/source/FreeRTOS_DHCP.goto", 45 "$(FREERTOS_PLUS_TCP)/source/portable/BufferManagement/BufferAllocation_2.goto", 46 "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/event_groups.goto", 47 "$(FREERTOS_PLUS_TCP)/test/FreeRTOS-Kernel/list.goto" 48 ], 49 50 "DEF": 51 [ 52 "CBMC_DHCPMESSAGE_HEADER_SIZE={BUFFER_HEADER}", 53 "CBMC_FREERTOS_RECVFROM_BUFFER_BOUND={BUFFER_SIZE}", 54 "ipconfigENDPOINT_DNS_ADDRESS_COUNT={ENDPOINT_DNS_ADDRESS_COUNT}" 55 ] 56} 57