Skip to content

Commit 1b25578

Browse files
committed
Fixed len for TTL_EXCEEDED icmp packet
1 parent 4f7c595 commit 1b25578

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

src/wolfip.c

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1069,15 +1069,18 @@ static void wolfIP_send_ttl_exceeded(struct wolfIP *s, unsigned int if_idx, stru
10691069
struct wolfIP_ll_dev *ll = wolfIP_ll_at(s, if_idx);
10701070
struct wolfIP_icmp_ttl_exceeded_packet icmp;
10711071
struct wolfIP_icmp_packet *icmp_pkt = (struct wolfIP_icmp_packet *)&icmp;
1072+
uint16_t copy_len;
10721073
#if !CONFIG_IPFILTER
10731074
(void)icmp_pkt;
10741075
#endif
10751076
if (!ll || !ll->send)
10761077
return;
10771078
memset(&icmp, 0, sizeof(icmp));
10781079
icmp.type = ICMP_TTL_EXCEEDED;
1079-
memcpy(icmp.orig_packet, ((uint8_t *)orig) + ETH_HEADER_LEN,
1080-
TTL_EXCEEDED_ORIG_PACKET_SIZE);
1080+
copy_len = ee16(orig->len);
1081+
if (copy_len > TTL_EXCEEDED_ORIG_PACKET_SIZE)
1082+
copy_len = TTL_EXCEEDED_ORIG_PACKET_SIZE;
1083+
memcpy(icmp.orig_packet, ((uint8_t *)orig) + ETH_HEADER_LEN, copy_len);
10811084
icmp.csum = ee16(icmp_checksum((struct wolfIP_icmp_packet *)&icmp,
10821085
ICMP_TTL_EXCEEDED_SIZE));
10831086
icmp.ip.ver_ihl = 0x45;

0 commit comments

Comments
 (0)