aboutsummaryrefslogtreecommitdiff
path: root/sbin/ping6
diff options
context:
space:
mode:
authorMarcelo Araujo <araujo@FreeBSD.org>2016-07-05 07:01:42 +0000
committerMarcelo Araujo <araujo@FreeBSD.org>2016-07-05 07:01:42 +0000
commit8ac248ea27f80d1292220393b428d1dfac7099bd (patch)
tree9b2ac3dbfff43f59d3efa360bde9cbdf1054a690 /sbin/ping6
parent91ebf7d76582a73ac4c0a32964e4d3912010671e (diff)
downloadsrc-8ac248ea27f80d1292220393b428d1dfac7099bd.tar.gz
src-8ac248ea27f80d1292220393b428d1dfac7099bd.zip
Fix a regression introduced on revision r271909, when using argument -g
or several hops we have segmentation fault because we overwrite the same structure to store information for host and gateway. Submitted by: Maryse Levavasseur <maryse.levavasseur@stormshield.eu> Reworked by: hrs Approved by: re (hrs) Differential Revision: https://reviews.freebsd.org/D6980
Notes
Notes: svn path=/head/; revision=302342
Diffstat (limited to 'sbin/ping6')
-rw-r--r--sbin/ping6/ping6.c7
1 files changed, 2 insertions, 5 deletions
diff --git a/sbin/ping6/ping6.c b/sbin/ping6/ping6.c
index 732e63407651..51a154d325f3 100644
--- a/sbin/ping6/ping6.c
+++ b/sbin/ping6/ping6.c
@@ -515,7 +515,6 @@ main(int argc, char *argv[])
memcpy(&src, res->ai_addr, res->ai_addrlen);
srclen = res->ai_addrlen;
freeaddrinfo(res);
- res = NULL;
options |= F_SRCADDR;
break;
case 's': /* size of packet to send */
@@ -631,7 +630,7 @@ main(int argc, char *argv[])
if (error)
errx(1, "%s", gai_strerror(error));
if (res->ai_canonname)
- hostname = res->ai_canonname;
+ hostname = strdup(res->ai_canonname);
else
hostname = target;
@@ -643,6 +642,7 @@ main(int argc, char *argv[])
if ((s = socket(res->ai_family, res->ai_socktype,
res->ai_protocol)) < 0)
err(1, "socket");
+ freeaddrinfo(res);
/* set the source address if specified. */
if ((options & F_SRCADDR) != 0) {
@@ -1208,9 +1208,6 @@ main(int argc, char *argv[])
sigaction(SIGALRM, &si_sa, 0);
summary();
- if (res != NULL)
- freeaddrinfo(res);
-
if(packet != NULL)
free(packet);