diff options
author | Sam Roberts <vieuxtech@gmail.com> | 2010-03-04 18:46:34 -0800 |
---|---|---|
committer | Sam Roberts <vieuxtech@gmail.com> | 2010-03-04 18:46:34 -0800 |
commit | 4140594136a0d1032366eefab63209a2901b7dd2 (patch) | |
tree | b70d911301a46d6880a7ed6a24d6b805c23da119 | |
parent | 44c8686aa1dfb5aa6071146d56cdaef3ba47e016 (diff) | |
download | libnet-4140594136a0d1032366eefab63209a2901b7dd2.tar.gz |
checksum would segfault if a IP checksum was requested for a non-ipv4 header
-rw-r--r-- | libnet/src/libnet_checksum.c | 10 |
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: |