aboutsummaryrefslogtreecommitdiffstats
path: root/meta-networking/recipes-support/ndisc6/ndisc6/0001-replace-VLAIS-with-malloc-free-pair.patch
blob: dc58b5b79ee29598b45a9f5eefcf6a4acd0ec200 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
From 3a7d5396e633e6c02a4583be7faf3d79d0d33748 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Thu, 31 Aug 2017 11:14:41 -0700
Subject: [PATCH 1/2] replace VLAIS with malloc/free pair

Makes it compatible with non-gnu compilers

Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
Upstream-Status: Pending

 src/trace-icmp.c |  7 +++++--
 src/trace-tcp.c  | 14 ++++++++++----
 src/trace-udp.c  |  7 +++++--
 3 files changed, 20 insertions(+), 8 deletions(-)

diff --git a/src/trace-icmp.c b/src/trace-icmp.c
index 842938e..c76cb54 100644
--- a/src/trace-icmp.c
+++ b/src/trace-icmp.c
@@ -43,16 +43,19 @@ send_echo_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
 	struct
 	{
 		struct icmp6_hdr ih;
-		uint8_t payload[plen - sizeof (struct icmp6_hdr)];
+		uint8_t *payload;
 	} packet;
 	memset (&packet, 0, plen);
+	packet.payload = malloc(plen - sizeof (struct icmp6_hdr));
 
 	packet.ih.icmp6_type = ICMP6_ECHO_REQUEST;
 	packet.ih.icmp6_id = htons (getpid ());
 	packet.ih.icmp6_seq = htons ((ttl << 8) | (n & 0xff));
 	(void)port;
 
-	return send_payload (fd, &packet.ih, plen, ttl);
+	ssize_t ret = send_payload (fd, &packet.ih, plen, ttl);
+	free(packet.payload);
+	return ret;
 }
 
 
diff --git a/src/trace-tcp.c b/src/trace-tcp.c
index 940f918..62d22ff 100644
--- a/src/trace-tcp.c
+++ b/src/trace-tcp.c
@@ -54,10 +54,11 @@ send_syn_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
 	struct
 	{
 		struct tcphdr th;
-		uint8_t payload[plen - sizeof (struct tcphdr)];
+		uint8_t *payload;
 	} packet;
 
 	memset (&packet, 0, sizeof (packet));
+	packet.payload = malloc(plen - sizeof (struct tcphdr));
 	packet.th.th_sport = sport;
 	packet.th.th_dport = port;
 	packet.th.th_seq = htonl ((ttl << 24) | (n << 16) | (uint16_t)getpid ());
@@ -65,7 +66,9 @@ send_syn_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
 	packet.th.th_flags = TH_SYN | (ecn ? (TH_ECE | TH_CWR) : 0);
 	packet.th.th_win = htons (TCP_WINDOW);
 
-	return send_payload (fd, &packet, plen, ttl);
+	ssize_t ret = send_payload (fd, &packet, plen, ttl);
+	free(packet.payload);
+	return ret;
 }
 
 
@@ -131,10 +134,11 @@ send_ack_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
 	struct
 	{
 		struct tcphdr th;
-		uint8_t payload[plen - sizeof (struct tcphdr)];
+		uint8_t *payload;
 	} packet;
 
 	memset (&packet, 0, sizeof (packet));
+	packet.payload = malloc(plen - sizeof (struct tcphdr));
 	packet.th.th_sport = sport;
 	packet.th.th_dport = port;
 	packet.th.th_ack = htonl ((ttl << 24) | (n << 16) | (uint16_t)getpid ());
@@ -142,7 +146,9 @@ send_ack_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
 	packet.th.th_flags = TH_ACK;
 	packet.th.th_win = htons (TCP_WINDOW);
 
-	return send_payload (fd, &packet, plen, ttl);
+	ssize_t ret = send_payload (fd, &packet, plen, ttl);
+	free(packet.payload);
+	return ret;
 }
 
 
diff --git a/src/trace-udp.c b/src/trace-udp.c
index 4adde6b..a6cbb07 100644
--- a/src/trace-udp.c
+++ b/src/trace-udp.c
@@ -46,9 +46,10 @@ send_udp_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
 	struct
 	{
 		struct udphdr uh;
-		uint8_t payload[plen - sizeof (struct udphdr)];
+		uint8_t *payload;
 	} packet;
 	memset (&packet, 0, plen);
+	packet.payload = malloc(plen - sizeof (struct udphdr));
 
 	(void)n;
 	packet.uh.uh_sport = sport;
@@ -61,7 +62,9 @@ send_udp_probe (int fd, unsigned ttl, unsigned n, size_t plen, uint16_t port)
 	/*if (plen > sizeof (struct udphdr))
 		packet.payload[0] = (uint8_t)ttl;*/
 
-	return send_payload (fd, &packet, plen, ttl);
+	ssize_t ret = send_payload (fd, &packet, plen, ttl);
+	free(packet.payload);
+	return ret;
 }
 
 
-- 
2.14.1