diff options
author | Sam Roberts <vieuxtech@gmail.com> | 2009-03-30 17:57:41 -0700 |
---|---|---|
committer | Sam Roberts <vieuxtech@gmail.com> | 2009-03-30 17:57:41 -0700 |
commit | 2fe8da3a8e01ecc8697e529de5cbba5a502473b5 (patch) | |
tree | 62aa73970257b2ef653d414ef0939f8cf4882971 | |
parent | 14f67cc09cf7c98a871a5e07d699a0d57b2d7747 (diff) | |
download | libnet-2fe8da3a8e01ecc8697e529de5cbba5a502473b5.tar.gz |
Fix for debian bug# 418975, IPv6 wasn't updating ip_offset.
See http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=418975 and
sample test_ipv6_icmpv4.c for more information, and reproduction.
-rw-r--r-- | libnet/sample/Makefile.am | 3 | ||||
-rw-r--r-- | libnet/sample/test_ipv6_icmpv4.c (renamed from unmerged/test_ipv6_icmpv4.c) | 0 | ||||
-rw-r--r-- | libnet/src/libnet_build_ip.c | 9 | ||||
-rw-r--r-- | libnet/src/libnet_pblock.c | 2 |
4 files changed, 10 insertions, 4 deletions
diff --git a/libnet/sample/Makefile.am b/libnet/sample/Makefile.am index 3186f5d..87b76a7 100644 --- a/libnet/sample/Makefile.am +++ b/libnet/sample/Makefile.am @@ -14,7 +14,7 @@ noinst_PROGRAMS = arp cdp dhcp_discover get_addr icmp_timestamp icmp_unreach \ smurf dot1x dns rpc_tcp rpc_udp mpls icmp_timeexceed \ fddi_tcp1 fddi_tcp2 tring_tcp1 tring_tcp2 icmp_redirect \ bgp4_hdr bgp4_open bgp4_update bgp4_notification gre \ - synflood6_frag tftp ip_link ip_raw sebek test_ipv4 + synflood6_frag tftp ip_link ip_raw sebek test_ipv4 test_ipv6_icmpv4 arp_SOURCES = arp.c cdp_SOURCES = cdp.c @@ -60,5 +60,6 @@ ip_raw_SOURCES = ip_raw.c ip_link_SOURCES = ip_link.c sebek_SOURCES = sebek.c test_ipv4_SOURCES = test_ipv4.c +test_ipv6_icmpv4_SOURCES = test_ipv6_icmpv4.c LDADD = $(top_srcdir)/src/libnet.la diff --git a/unmerged/test_ipv6_icmpv4.c b/libnet/sample/test_ipv6_icmpv4.c index b3dcd67..b3dcd67 100644 --- a/unmerged/test_ipv6_icmpv4.c +++ b/libnet/sample/test_ipv6_icmpv4.c diff --git a/libnet/src/libnet_build_ip.c b/libnet/src/libnet_build_ip.c index e0e760d..c23c296 100644 --- a/libnet/src/libnet_build_ip.c +++ b/libnet/src/libnet_build_ip.c @@ -557,8 +557,13 @@ u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag) } /* no checksum for IPv6 */ - return (ptag ? ptag : libnet_pblock_update(l, p, LIBNET_IPV6_H, - LIBNET_PBLOCK_IPV6_H)); + ptag = ptag ? ptag : libnet_pblock_update(l, p, LIBNET_IPV6_H, + LIBNET_PBLOCK_IPV6_H); + + libnet_pblock_record_ip_offset(l, p); + + return ptag; + bad: libnet_pblock_delete(l, p); return (-1); diff --git a/libnet/src/libnet_pblock.c b/libnet/src/libnet_pblock.c index b213b1d..5530c02 100644 --- a/libnet/src/libnet_pblock.c +++ b/libnet/src/libnet_pblock.c @@ -506,7 +506,7 @@ libnet_pblock_record_ip_offset(libnet_t *l, libnet_pblock_t *p) libnet_pblock_t *c; u_int32_t ip_offset = 0; - assert(p->type == LIBNET_PBLOCK_IPV4_H); + assert(p->type == LIBNET_PBLOCK_IPV4_H || p->type == LIBNET_PBLOCK_IPV6_H); for(c = p; c; c = c->prev) ip_offset += c->b_len; |