aboutsummaryrefslogtreecommitdiff
path: root/src/tun
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2012-01-30 22:01:44 +0000
committerChristian Grothoff <christian@grothoff.org>2012-01-30 22:01:44 +0000
commitec9338c28ca046638191baba9a7cc05a7a4dd28d (patch)
treefe04bfdb1bfbc081da32312549f07a3dd4078e20 /src/tun
parent14dc5d7546f1588caeee4af92fcad2e435008ee4 (diff)
downloadgnunet-ec9338c28ca046638191baba9a7cc05a7a4dd28d.tar.gz
gnunet-ec9338c28ca046638191baba9a7cc05a7a4dd28d.zip
-extra size checks
Diffstat (limited to 'src/tun')
-rw-r--r--src/tun/tun.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/tun/tun.c b/src/tun/tun.c
index c1e7cbcb2..3b0e9b94a 100644
--- a/src/tun/tun.c
+++ b/src/tun/tun.c
@@ -49,6 +49,7 @@ GNUNET_TUN_initialize_ipv4_header (struct GNUNET_TUN_IPv4Header *ip,
49 const struct in_addr *src, 49 const struct in_addr *src,
50 const struct in_addr *dst) 50 const struct in_addr *dst)
51{ 51{
52 GNUNET_assert (20 == sizeof (struct GNUNET_TUN_IPv4Header));
52 GNUNET_assert (payload_length <= UINT16_MAX - sizeof (struct GNUNET_TUN_IPv4Header)); 53 GNUNET_assert (payload_length <= UINT16_MAX - sizeof (struct GNUNET_TUN_IPv4Header));
53 memset (ip, 0, sizeof (struct GNUNET_TUN_IPv4Header)); 54 memset (ip, 0, sizeof (struct GNUNET_TUN_IPv4Header));
54 ip->header_length = sizeof (struct GNUNET_TUN_IPv4Header) / 4; 55 ip->header_length = sizeof (struct GNUNET_TUN_IPv4Header) / 4;
@@ -80,6 +81,7 @@ GNUNET_TUN_initialize_ipv6_header (struct GNUNET_TUN_IPv6Header *ip,
80 const struct in6_addr *src, 81 const struct in6_addr *src,
81 const struct in6_addr *dst) 82 const struct in6_addr *dst)
82{ 83{
84 GNUNET_assert (40 == sizeof (struct GNUNET_TUN_IPv6Header));
83 GNUNET_assert (payload_length <= UINT16_MAX - sizeof (struct GNUNET_TUN_IPv6Header)); 85 GNUNET_assert (payload_length <= UINT16_MAX - sizeof (struct GNUNET_TUN_IPv6Header));
84 memset (ip, 0, sizeof (struct GNUNET_TUN_IPv6Header)); 86 memset (ip, 0, sizeof (struct GNUNET_TUN_IPv6Header));
85 ip->version = 6; 87 ip->version = 6;
@@ -108,6 +110,7 @@ GNUNET_TUN_calculate_tcp4_checksum (const struct GNUNET_TUN_IPv4Header *ip,
108 uint32_t sum; 110 uint32_t sum;
109 uint16_t tmp; 111 uint16_t tmp;
110 112
113 GNUNET_assert (20 == sizeof (struct GNUNET_TUN_TcpHeader));
111 GNUNET_assert (payload_length + sizeof (struct GNUNET_TUN_IPv4Header) + sizeof (struct GNUNET_TUN_TcpHeader) == 114 GNUNET_assert (payload_length + sizeof (struct GNUNET_TUN_IPv4Header) + sizeof (struct GNUNET_TUN_TcpHeader) ==
112 ntohs (ip->total_length)); 115 ntohs (ip->total_length));
113 GNUNET_assert (IPPROTO_TCP == ip->protocol); 116 GNUNET_assert (IPPROTO_TCP == ip->protocol);
@@ -143,6 +146,7 @@ GNUNET_TUN_calculate_tcp6_checksum (const struct GNUNET_TUN_IPv6Header *ip,
143 uint32_t sum; 146 uint32_t sum;
144 uint32_t tmp; 147 uint32_t tmp;
145 148
149 GNUNET_assert (20 == sizeof (struct GNUNET_TUN_TcpHeader));
146 GNUNET_assert (payload_length + sizeof (struct GNUNET_TUN_TcpHeader) == 150 GNUNET_assert (payload_length + sizeof (struct GNUNET_TUN_TcpHeader) ==
147 ntohs (ip->payload_length)); 151 ntohs (ip->payload_length));
148 GNUNET_assert (IPPROTO_TCP == ip->next_header); 152 GNUNET_assert (IPPROTO_TCP == ip->next_header);
@@ -176,6 +180,7 @@ GNUNET_TUN_calculate_udp4_checksum (const struct GNUNET_TUN_IPv4Header *ip,
176 uint32_t sum; 180 uint32_t sum;
177 uint16_t tmp; 181 uint16_t tmp;
178 182
183 GNUNET_assert (8 == sizeof (struct GNUNET_TUN_UdpHeader));
179 GNUNET_assert (payload_length + sizeof (struct GNUNET_TUN_IPv4Header) + sizeof (struct GNUNET_TUN_UdpHeader) == 184 GNUNET_assert (payload_length + sizeof (struct GNUNET_TUN_IPv4Header) + sizeof (struct GNUNET_TUN_UdpHeader) ==
180 ntohs (ip->total_length)); 185 ntohs (ip->total_length));
181 GNUNET_assert (IPPROTO_UDP == ip->protocol); 186 GNUNET_assert (IPPROTO_UDP == ip->protocol);
@@ -253,6 +258,7 @@ GNUNET_TUN_calculate_icmp_checksum (struct GNUNET_TUN_IcmpHeader *icmp,
253{ 258{
254 uint32_t sum; 259 uint32_t sum;
255 260
261 GNUNET_assert (8 == sizeof (struct GNUNET_TUN_IcmpHeader));
256 icmp->crc = 0; 262 icmp->crc = 0;
257 sum = GNUNET_CRYPTO_crc16_step (0, 263 sum = GNUNET_CRYPTO_crc16_step (0,
258 icmp, 264 icmp,