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