Skip to content

Commit 5983e14

Browse files
author
Alexander Senier
committed
Perform test though FreeRTOS Ethernet handler
1 parent 4d14c7f commit 5983e14

File tree

4 files changed

+31
-12
lines changed

4 files changed

+31
-12
lines changed

examples/include/FreeRTOS-10.0.1/FreeRTOSIPConfig.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,5 +10,6 @@
1010
#define ipconfigUSE_DNS 0
1111
#define ipconfigUSE_TCP 0
1212
#define ipconfigREPLY_TO_INCOMING_PINGS 1
13+
#define ipconfigDRIVER_INCLUDED_RX_IP_CHECKSUM 1
1314

1415
#endif // FREERTOS_IP_CONFIG_H

examples/include/FreeRTOS-10.0.1/semphr.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
typedef QueueHandle_t SemaphoreHandle_t;
77

8-
#define xSemaphoreCreateCounting(m, i) (0)
8+
#define xSemaphoreCreateCounting(m, i) ((SemaphoreHandle_t *)1)
99
#define xSemaphoreTake(s, t) (pdPASS)
1010
#define xSemaphoreTakeFromISR(s, h) (pdPASS)
1111
#define xSemaphoreGiveFromISR(s, h) (pdPASS)

examples/src/queue.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ BaseType_t xQueueGenericSendFromISR( QueueHandle_t xQueue, const void * const pv
2525

2626
UBaseType_t uxQueueMessagesWaitingFromISR( const QueueHandle_t xQueue )
2727
{
28-
errx(1, "NOT IMPLEMENTED: %s", __func__);
28+
return 256;
2929
}
3030

3131
void vQueueDelete( QueueHandle_t xQueue )

examples/src/vuln_75.c

Lines changed: 28 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,44 @@
1+
#include <stdio.h>
2+
#include <stdlib.h>
3+
#include <err.h>
4+
15
#include "FreeRTOS.h"
26
#include "list.h"
37
#include "task.h"
48
#include "FreeRTOS_IP.h"
59
#include "FreeRTOS_IP_Private.h"
10+
#include "NetworkBufferManagement.h"
611

7-
eFrameProcessingResult_t prvProcessICMPPacket( ICMPPacket_t * const pxICMPPacket );
12+
NetworkBufferDescriptor_t *network_buffer;
13+
void prvProcessEthernetPacket( NetworkBufferDescriptor_t * const pxNetworkBuffer );
814

915
char data[] =
1016
// Ethernet header
11-
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
17+
"\x00\x00\x00\x00\x00\x00" // destination
18+
"\x00\x00\x00\x00\x00\x00" // source
19+
"\x08\x00" // ether type: IPv4
1220
// IP header
13-
"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
21+
"\x45" // Version / IHL
22+
"\x00" // DCSP / ECN
23+
"\x00\x21" // Total Length (21)
24+
"\x00\x00" // Identification
25+
"\x00\x00" // R / DF / MF / Fragment Offset
26+
"\x00" // TTL
27+
"\x01" // protocol: icmp (1)
28+
"\x00\x00" // header checksum
29+
"\x00\x00\x00\x00" // source
30+
"\x00\x00\x00\x00" // destination
1431
// ICMP header
15-
"\x8" // Type of message -- echo request
16-
// Leaving out subsequent fields results in a buffer overflow
17-
// "\0" // Type of service
18-
// "\0\0" // Checksum
19-
// "\0\0" // Identifier
20-
// "\0\0" // Sequence number
32+
"\x08" // Type of message -- echo request
2133
;
2234

2335
int main()
2436
{
25-
eFrameProcessingResult_t result = prvProcessICMPPacket ((ICMPPacket_t *)data);
37+
if (xNetworkBuffersInitialise() != pdPASS) {
38+
errx(1, "Error initializing network buffers");
39+
}
40+
network_buffer = pxNetworkBufferGetFromISR(1500);
41+
network_buffer->xDataLength = sizeof(data);
42+
network_buffer->pucEthernetBuffer = data;
43+
prvProcessEthernetPacket (network_buffer);
2644
}

0 commit comments

Comments
 (0)