The inet_ntop expects to know the dst size buffer. But instead of
specifying how to calculate the size of this buffer, just a value was
hardcoded - which might not fulfill the "INET6_ADDRSTRLEN" size
requirements.

Evaluate the size of the buffer at compile time to avoid potential
discrepancies.

Fixes: 35b37756f4a3 ("add IPv6 support to tcpdump parser")
Signed-off-by: Sven Eckelmann <[email protected]>
---
 tcpdump.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tcpdump.c b/tcpdump.c
index e417cd1..0895c61 100644
--- a/tcpdump.c
+++ b/tcpdump.c
@@ -676,7 +676,7 @@ static void dump_ipv6(unsigned char *packet_buff, ssize_t 
buff_len,
                                  sizeof(*nd_neigh_sol), "ICMPv6 Neighbor 
Solicitation");
                        nd_neigh_sol = (struct nd_neighbor_solicit *)icmphdr;
                        inet_ntop(AF_INET6, &nd_neigh_sol->nd_ns_target,
-                                 nd_nas_target, 40);
+                                 nd_nas_target, sizeof(nd_nas_target));
                        printf(" neighbor solicitation, who has %s, length 
%zd\n",
                               nd_nas_target, buff_len);
                        break;
@@ -685,7 +685,7 @@ static void dump_ipv6(unsigned char *packet_buff, ssize_t 
buff_len,
                                  sizeof(*nd_advert), "ICMPv6 Neighbor 
Advertisement");
                        nd_advert = (struct nd_neighbor_advert *)icmphdr;
                        inet_ntop(AF_INET6, &nd_advert->nd_na_target,
-                                 nd_nas_target, 40);
+                                 nd_nas_target, sizeof(nd_nas_target));
                        printf(" neighbor advertisement, tgt is %s, length 
%zd\n",
                               nd_nas_target, buff_len);
                        break;

-- 
2.47.3

Reply via email to