From 24c3cdcf6f37dcb92ddffbf8caff1a4f682d58d3 Mon Sep 17 00:00:00 2001 From: xHire Date: Sat, 21 Oct 2017 10:46:44 +0200 Subject: [PATCH] Include propagation of payload size for ICMPv6 too --- src/icmp.c | 7 +++---- src/icmp.h | 3 ++- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/icmp.c b/src/icmp.c index c6b4ac2..ad0ef1c 100644 --- a/src/icmp.c +++ b/src/icmp.c @@ -351,11 +351,13 @@ int icmp_ipv4(struct s_ethernet *eth4, struct s_ipv4 *ip4, char *payload, * @param eth6 Ethernet header * @param ip6 IPv6 header * @param payload ICMPv6 data + * @param payload_size Size of the data payload * * @return 0 for success * @return 1 for failure */ -int icmp_ipv6(struct s_ethernet *eth6, struct s_ipv6 *ip6, char *payload) +int icmp_ipv6(struct s_ethernet *eth6, struct s_ipv6 *ip6, char *payload, + unsigned short payload_size) { struct s_icmp *icmp; unsigned int *icmp_extra; @@ -364,7 +366,6 @@ int icmp_ipv6(struct s_ethernet *eth6, struct s_ipv6 *ip6, char *payload) char *icmp_data; struct s_nat *connection; unsigned short orig_checksum; - unsigned short payload_size; char packet[PACKET_BUFFER - sizeof(struct s_ethernet)]; unsigned short new_len = sizeof(struct s_ipv4); @@ -372,8 +373,6 @@ int icmp_ipv6(struct s_ethernet *eth6, struct s_ipv6 *ip6, char *payload) struct s_ipv4 *ip4; struct s_ipv6 *eip6; - payload_size = ntohs(ip6->len); - /* sanity check */ if (payload_size < sizeof(struct s_icmp) + 4) { log_debug("Too short ICMPv6 packet"); diff --git a/src/icmp.h b/src/icmp.h index 85d0577..fbda5e3 100644 --- a/src/icmp.h +++ b/src/icmp.h @@ -79,7 +79,8 @@ struct s_icmp_ndp_na { int icmp_ipv4(struct s_ethernet *eth, struct s_ipv4 *ip4, char *payload, unsigned short payload_size); -int icmp_ipv6(struct s_ethernet *eth, struct s_ipv6 *ip6, char *payload); +int icmp_ipv6(struct s_ethernet *eth6, struct s_ipv6 *ip6, char *payload, + unsigned short payload_size); int icmp_ndp(struct s_ethernet *ethq, struct s_ipv6 *ipq, struct s_icmp_ndp_ns *ndp_ns);