summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Roberts <vieuxtech@gmail.com>2010-03-04 18:46:34 -0800
committerSam Roberts <vieuxtech@gmail.com>2010-03-04 18:46:34 -0800
commit4140594136a0d1032366eefab63209a2901b7dd2 (patch)
treeb70d911301a46d6880a7ed6a24d6b805c23da119
parent44c8686aa1dfb5aa6071146d56cdaef3ba47e016 (diff)
downloadlibnet-4140594136a0d1032366eefab63209a2901b7dd2.tar.gz
checksum would segfault if a IP checksum was requested for a non-ipv4 header
-rw-r--r--libnet/src/libnet_checksum.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/libnet/src/libnet_checksum.c b/libnet/src/libnet_checksum.c
index 28cb053..d2c25a5 100644
--- a/libnet/src/libnet_checksum.c
+++ b/libnet/src/libnet_checksum.c
@@ -468,9 +468,13 @@ libnet_inet_checksum(libnet_t *l, uint8_t *iphdr, int protocol, int h_len, const
}
case IPPROTO_IP:
{
- iph_p->ip_sum = 0;
- sum = libnet_in_cksum((uint16_t *)iph_p, ip_hl);
- iph_p->ip_sum = LIBNET_CKSUM_CARRY(sum);
+ if(!iph_p) {
+ /* IPv6 doesn't have a checksum */
+ } else {
+ iph_p->ip_sum = 0;
+ sum = libnet_in_cksum((uint16_t *)iph_p, ip_hl);
+ iph_p->ip_sum = LIBNET_CKSUM_CARRY(sum);
+ }
break;
}
case IPPROTO_VRRP: