diff options
author | Marcelo Araujo <araujo@FreeBSD.org> | 2016-07-05 07:01:42 +0000 |
---|---|---|
committer | Marcelo Araujo <araujo@FreeBSD.org> | 2016-07-05 07:01:42 +0000 |
commit | 8ac248ea27f80d1292220393b428d1dfac7099bd (patch) | |
tree | 9b2ac3dbfff43f59d3efa360bde9cbdf1054a690 /sbin/ping6 | |
parent | 91ebf7d76582a73ac4c0a32964e4d3912010671e (diff) | |
download | src-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.c | 7 |
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); |