From 633df3588f51e9dabd72486bd1c046f4d7972b9e Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Sep 27 2022 19:53:06 +0000 Subject: import iputils-20180629-10.el8 --- diff --git a/SOURCES/0000-iputils-rh.patch b/SOURCES/0000-iputils-rh.patch new file mode 100644 index 0000000..f66f885 --- /dev/null +++ b/SOURCES/0000-iputils-rh.patch @@ -0,0 +1,20 @@ +--- iputils-s20160308/Makefile 2016-03-08 13:58:56.000000000 +0100 ++++ iputils-s20160308-new/Makefile 2016-03-09 10:09:02.295409179 +0100 +@@ -36,7 +36,7 @@ WITHOUT_IFADDRS=no + ARPING_DEFAULT_DEVICE= + + # nettle library for ipv6 ping [yes|no|static] +-USE_NETTLE=yes ++USE_NETTLE=no + # libgcrypt library for ipv6 ping [no|yes|static] + USE_GCRYPT=no + # Crypto library for ping6 [shared|static|no] +@@ -53,7 +53,7 @@ ENABLE_RDISC_SERVER=no + # What a pity, all new gccs are buggy and -Werror does not work. Sigh. + # CFLAGS+=-fno-strict-aliasing -Wstrict-prototypes -Wall -Werror -g + CFLAGS?=-O3 -g +-CFLAGS+=-fno-strict-aliasing -Wstrict-prototypes -Wall ++CFLAGS+=$(RPM_OPT_FLAGS) -fno-strict-aliasing -Wstrict-prototypes -Wall + CPPFLAGS+=-D_GNU_SOURCE + LDLIB= + diff --git a/SOURCES/0001-iputils-ifenslave.patch b/SOURCES/0001-iputils-ifenslave.patch new file mode 100644 index 0000000..662d69d --- /dev/null +++ b/SOURCES/0001-iputils-ifenslave.patch @@ -0,0 +1,13 @@ +--- iputils/ifenslave.c.addr 2006-03-29 15:00:24.000000000 +0200 ++++ iputils/ifenslave.c 2006-03-29 15:02:01.000000000 +0200 +@@ -524,8 +524,8 @@ + if (ioctl(skfd, SIOCGIFADDR, &ifr) < 0) + return -1; + printf("The result of SIOCGIFADDR is %2.2x.%2.2x.%2.2x.%2.2x.\n", +- ifr.ifr_addr.sa_data[0], ifr.ifr_addr.sa_data[1], +- ifr.ifr_addr.sa_data[2], ifr.ifr_addr.sa_data[3]); ++ ifr.ifr_addr.sa_data[2], ifr.ifr_addr.sa_data[3], ++ ifr.ifr_addr.sa_data[4], ifr.ifr_addr.sa_data[5]); + + strcpy(ifr.ifr_name, ifname); + if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) diff --git a/SOURCES/0002-iputils-freeaddrinfo.patch b/SOURCES/0002-iputils-freeaddrinfo.patch new file mode 100644 index 0000000..e814c43 --- /dev/null +++ b/SOURCES/0002-iputils-freeaddrinfo.patch @@ -0,0 +1,14 @@ +--- a/ping.c 2018-06-29 20:00:46.000000000 +0200 ++++ b/ping.c 2019-07-10 09:50:06.653039073 +0200 +@@ -589,8 +589,10 @@ int ping4_run(int argc, char **argv, str + strncpy(hnamebuf, ai->ai_canonname, sizeof hnamebuf - 1); + hostname = hnamebuf; + +- if (result) ++ if (result) { + freeaddrinfo(result); ++ ai = NULL; ++ } + } + if (argc > 1) + route[nroute++] = whereto.sin_addr.s_addr; diff --git a/SOURCES/0003-fix-incorrect-statistics.patch b/SOURCES/0003-fix-incorrect-statistics.patch new file mode 100644 index 0000000..efd719e --- /dev/null +++ b/SOURCES/0003-fix-incorrect-statistics.patch @@ -0,0 +1,25 @@ +From 445826446c32035b3c8e8a7780c4e4b885f0f98f Mon Sep 17 00:00:00 2001 +From: Jan Macku +Date: Mon, 7 Dec 2020 15:08:14 +0100 +Subject: [PATCH] ping: Fix incorrect statistics + +--- + ping_common.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ping_common.c b/ping_common.c +index 040bf23..02cb5e1 100644 +--- a/ping_common.c ++++ b/ping_common.c +@@ -934,7 +934,7 @@ void finish(void) + printf(", %g%% packet loss", + (float) ((((long long)(ntransmitted - nreceived)) * 100.0) / + ntransmitted)); +- printf(", time %ldms", (1000*tv.tv_sec+tv.tv_usec+500)/1000); ++ printf(", time %ldms", 1000*tv.tv_sec+(tv.tv_usec+500)/1000); + } + putchar('\n'); + +-- +2.28.0 + diff --git a/SOURCES/0004-tracepath-fix-copying-input-ipv6-address.patch b/SOURCES/0004-tracepath-fix-copying-input-ipv6-address.patch new file mode 100644 index 0000000..c3edb1c --- /dev/null +++ b/SOURCES/0004-tracepath-fix-copying-input-ipv6-address.patch @@ -0,0 +1,38 @@ +From e0baf20067a75f093d690bd51a6db3f5afabca77 Mon Sep 17 00:00:00 2001 +From: Petr Vorel +Date: Tue, 17 Jul 2018 17:56:10 +0200 +Subject: [PATCH] tracepath: Fix copying input IPv6 address + +Commit e669c86 broke copying input IPv6 address. +tracepath recover from it, but it's slower. + +Previously was address too short: + + strace ./tracepath -6 fe80::8895:e2af:e96e:fd8f + sendto(3, "\1\0\0\0\0\0\0\0\307\36N[\0\0\0\0w_\f\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 127952, 0, {sa_family=AF_INET6, sin6_port=htons(44444), inet_pton(AF_INET6, "fe80::", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = -1 EMSGSIZE (Message too long) + +After fix is correct: + + sendto(3, "\1\0\0\0\0\0\0\0\300\36N[\0\0\0\0'B\3\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 127952, 0, {sa_family=AF_INET6, sin6_port=htons(44444), inet_pton(AF_INET6, "fe80::8895:e2af:e96e:fd8f", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = -1 EMSGSIZE (Message too long) + +Bug found by LTP test. + +Fixes: e669c86 tracepath: fix heap-buffer-overflow [asan] +Fixes: #137 +--- + tracepath.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tracepath.c b/tracepath.c +index 53bda16f..539a7a11 100644 +--- a/tracepath.c ++++ b/tracepath.c +@@ -475,7 +475,7 @@ int main(int argc, char **argv) + fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); + if (fd < 0) + continue; +- memcpy(&target, ai->ai_addr, sizeof(*ai->ai_addr)); ++ memcpy(&target, ai->ai_addr, ai->ai_addrlen); + targetlen = ai->ai_addrlen; + break; + } diff --git a/SOURCES/0005-ninfod-change-variable-name-to-avoid-colliding-with-function-name.patch b/SOURCES/0005-ninfod-change-variable-name-to-avoid-colliding-with-function-name.patch new file mode 100644 index 0000000..7f41bbd --- /dev/null +++ b/SOURCES/0005-ninfod-change-variable-name-to-avoid-colliding-with-function-name.patch @@ -0,0 +1,48 @@ +From 18f9a84e0e702841d6cc4d5f593de4fbd1348e83 Mon Sep 17 00:00:00 2001 +From: Sami Kerola +Date: Sat, 28 Dec 2019 17:16:27 +0000 +Subject: [PATCH] ninfod: change variable name to avoid colliding with function + name + +The sys/capability.h header has 'extern int cap_setuid(uid_t uid);' +function prototype. + +Addresses: https://github.com/iputils/iputils/issues/246 +Signed-off-by: Sami Kerola +--- + ninfod/ninfod.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/ninfod/ninfod.c b/ninfod/ninfod.c +index 26112d0d..95583de4 100644 +--- a/ninfod/ninfod.c ++++ b/ninfod/ninfod.c +@@ -455,7 +455,7 @@ static void do_daemonize(void) + /* --------- */ + #ifdef HAVE_LIBCAP + static const cap_value_t cap_net_raw = CAP_NET_RAW; +-static const cap_value_t cap_setuid = CAP_SETUID; ++static const cap_value_t cap_setuserid = CAP_SETUID; + static cap_flag_value_t cap_ok; + #else + static uid_t euid; +@@ -487,7 +487,7 @@ static void limit_capabilities(void) + + cap_get_flag(cap_cur_p, CAP_SETUID, CAP_PERMITTED, &cap_ok); + if (cap_ok != CAP_CLEAR) +- cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuid, CAP_SET); ++ cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuserid, CAP_SET); + + if (cap_set_proc(cap_p) < 0) { + DEBUG(LOG_ERR, "cap_set_proc: %s\n", strerror(errno)); +@@ -520,8 +520,8 @@ static void drop_capabilities(void) + + /* setuid / setuid */ + if (cap_ok != CAP_CLEAR) { +- cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuid, CAP_SET); +- cap_set_flag(cap_p, CAP_EFFECTIVE, 1, &cap_setuid, CAP_SET); ++ cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuserid, CAP_SET); ++ cap_set_flag(cap_p, CAP_EFFECTIVE, 1, &cap_setuserid, CAP_SET); + + if (cap_set_proc(cap_p) < 0) { + DEBUG(LOG_ERR, "cap_set_proc: %s\n", strerror(errno)); diff --git a/SOURCES/0006-ping-Fix-unwanted-bell-on-unreachable-address.patch b/SOURCES/0006-ping-Fix-unwanted-bell-on-unreachable-address.patch new file mode 100644 index 0000000..f750efc --- /dev/null +++ b/SOURCES/0006-ping-Fix-unwanted-bell-on-unreachable-address.patch @@ -0,0 +1,113 @@ +From dc4f836759887a6edf141aa55adbdb9bc63f5e69 Mon Sep 17 00:00:00 2001 +From: Jan Macku +Date: Tue, 22 Mar 2022 12:59:21 +0100 +Subject: [PATCH] ping: Fix unwanted bell on unreachable address + +Commit 4471ac629cf2603f4b8b45e042e072c992ce25a5 caused regression for IPv6 +that ping -a IP6_ADDR beeps also on wrong address (i.e. when "Address +unreachable"): + + $ ping -a -c1 fd00:1:1:1::15 + PING fd00:1:1:1::15(fd00:1:1:1::15) 56 data bytes + From fd00:1:1:1::2 icmp_seq=1 Destination unreachable: Address unreachable + + --- fd00:1:1:1::15 ping statistics --- + 1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0m + +It should only bell when ping returns correctly. + +Another (fixed) regression was that ping after exit printed error "pipe N", +where N is number of counts. Error was result of code from ping_common.c: +printf("%spipe %d", comma, pipesize); + +4471ac6 was wrong that code for sock->working_recverr == 1 should stay, +sock->working_recverr should be removed. + +Thus changes: +* ping.c: put back "stronger filter" for raw socket but (unlike before + 4471ac6) exit with 2 if setsockopt(ICMP_FILTER) fails +* ping6_common.c: put back setsockopt(IPV6_RECVERR), but (unlike before + 4471ac6) exit with 2 if it fails +* ping6_common.c: remove ICMP6_FILTER_SETPASS calls. These caused error "pipe N". +* ping6_common.c: return 0 after acknowledge() in ping6_parse_reply + +Fixes: 4471ac6 ("ping: Remove workaround for bug in IP_RECVERR on raw sockets") +Fixes: https://github.com/iputils/iputils/issues/182 +Reported-by: Luiz Angelo Daros de Luca +Signed-off-by: Petr Vorel +Reviewed-by: Sami Kerola + +--- +Patch has been adjusted to be applicable to RHEL8 codebase + +Resolves: #2057570 +--- + ping.c | 11 +++++++++++ + ping6_common.c | 15 +++------------ + 2 files changed, 14 insertions(+), 12 deletions(-) + +diff --git a/ping.c b/ping.c +index d9a3f5d..c870390 100644 +--- a/ping.c ++++ b/ping.c +@@ -949,6 +949,17 @@ int ping4_receive_error_msg(socket_st *sock) + + acknowledge(ntohs(icmph.un.echo.sequence)); + ++ if (sock->socktype == SOCK_RAW) ++ { ++ struct icmp_filter filt; ++ ++ filt.data = ~((1 << ICMP_SOURCE_QUENCH) | ++ (1 << ICMP_REDIRECT) | ++ (1 << ICMP_ECHOREPLY)); ++ if (setsockopt(sock->fd, SOL_RAW, ICMP_FILTER, (const void *)&filt, ++ sizeof(filt)) == -1) ++ error(2, errno, "setsockopt(ICMP_FILTER)"); ++ } + net_errors++; + nerrors++; + if (options & F_QUIET) +diff --git a/ping6_common.c b/ping6_common.c +index 5991c2a..1181341 100644 +--- a/ping6_common.c ++++ b/ping6_common.c +@@ -879,6 +879,8 @@ int ping6_run(int argc, char **argv, struct addrinfo *ai, struct socket_st *sock + } + + hold = 1; ++ if (setsockopt(sock->fd, IPPROTO_IPV6, IPV6_RECVERR, (const void *)&hold, sizeof hold)) ++ error(2, errno, "IPV6_RECVERR"); + + /* Estimate memory eaten by single packet. It is rough estimate. + * Actually, for small datalen's it depends on kernel side a lot. */ +@@ -906,11 +908,6 @@ int ping6_run(int argc, char **argv, struct addrinfo *ai, struct socket_st *sock + + ICMP6_FILTER_SETBLOCKALL(&filter); + +- ICMP6_FILTER_SETPASS(ICMP6_DST_UNREACH, &filter); +- ICMP6_FILTER_SETPASS(ICMP6_PACKET_TOO_BIG, &filter); +- ICMP6_FILTER_SETPASS(ICMP6_TIME_EXCEEDED, &filter); +- ICMP6_FILTER_SETPASS(ICMP6_PARAM_PROB, &filter); +- + if (niquery_is_enabled()) + ICMP6_FILTER_SETPASS(ICMPV6_NI_REPLY, &filter); + else +@@ -1437,13 +1434,7 @@ ping6_parse_reply(socket_st *sock, struct msghdr *msg, int cc, void *addr, struc + !is_ours(sock, icmph1->icmp6_id)) + return 1; + acknowledge(ntohs(icmph1->icmp6_seq)); +- nerrors++; +- if (options & F_FLOOD) { +- write_stdout("\bE", 2); +- return 0; +- } +- print_timestamp(); +- printf("From %s: icmp_seq=%u ", pr_addr(from, sizeof *from), ntohs(icmph1->icmp6_seq)); ++ return 0; + } else { + /* We've got something other than an ECHOREPLY */ + if (!(options & F_VERBOSE) || uid) +-- +2.35.1 + diff --git a/SOURCES/fix-incorrect-statistics.patch b/SOURCES/fix-incorrect-statistics.patch deleted file mode 100644 index efd719e..0000000 --- a/SOURCES/fix-incorrect-statistics.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 445826446c32035b3c8e8a7780c4e4b885f0f98f Mon Sep 17 00:00:00 2001 -From: Jan Macku -Date: Mon, 7 Dec 2020 15:08:14 +0100 -Subject: [PATCH] ping: Fix incorrect statistics - ---- - ping_common.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ping_common.c b/ping_common.c -index 040bf23..02cb5e1 100644 ---- a/ping_common.c -+++ b/ping_common.c -@@ -934,7 +934,7 @@ void finish(void) - printf(", %g%% packet loss", - (float) ((((long long)(ntransmitted - nreceived)) * 100.0) / - ntransmitted)); -- printf(", time %ldms", (1000*tv.tv_sec+tv.tv_usec+500)/1000); -+ printf(", time %ldms", 1000*tv.tv_sec+(tv.tv_usec+500)/1000); - } - putchar('\n'); - --- -2.28.0 - diff --git a/SOURCES/iputils-freeaddrinfo.patch b/SOURCES/iputils-freeaddrinfo.patch deleted file mode 100644 index e814c43..0000000 --- a/SOURCES/iputils-freeaddrinfo.patch +++ /dev/null @@ -1,14 +0,0 @@ ---- a/ping.c 2018-06-29 20:00:46.000000000 +0200 -+++ b/ping.c 2019-07-10 09:50:06.653039073 +0200 -@@ -589,8 +589,10 @@ int ping4_run(int argc, char **argv, str - strncpy(hnamebuf, ai->ai_canonname, sizeof hnamebuf - 1); - hostname = hnamebuf; - -- if (result) -+ if (result) { - freeaddrinfo(result); -+ ai = NULL; -+ } - } - if (argc > 1) - route[nroute++] = whereto.sin_addr.s_addr; diff --git a/SOURCES/iputils-ifenslave.patch b/SOURCES/iputils-ifenslave.patch deleted file mode 100644 index 662d69d..0000000 --- a/SOURCES/iputils-ifenslave.patch +++ /dev/null @@ -1,13 +0,0 @@ ---- iputils/ifenslave.c.addr 2006-03-29 15:00:24.000000000 +0200 -+++ iputils/ifenslave.c 2006-03-29 15:02:01.000000000 +0200 -@@ -524,8 +524,8 @@ - if (ioctl(skfd, SIOCGIFADDR, &ifr) < 0) - return -1; - printf("The result of SIOCGIFADDR is %2.2x.%2.2x.%2.2x.%2.2x.\n", -- ifr.ifr_addr.sa_data[0], ifr.ifr_addr.sa_data[1], -- ifr.ifr_addr.sa_data[2], ifr.ifr_addr.sa_data[3]); -+ ifr.ifr_addr.sa_data[2], ifr.ifr_addr.sa_data[3], -+ ifr.ifr_addr.sa_data[4], ifr.ifr_addr.sa_data[5]); - - strcpy(ifr.ifr_name, ifname); - if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) diff --git a/SOURCES/iputils-rh.patch b/SOURCES/iputils-rh.patch deleted file mode 100644 index f66f885..0000000 --- a/SOURCES/iputils-rh.patch +++ /dev/null @@ -1,20 +0,0 @@ ---- iputils-s20160308/Makefile 2016-03-08 13:58:56.000000000 +0100 -+++ iputils-s20160308-new/Makefile 2016-03-09 10:09:02.295409179 +0100 -@@ -36,7 +36,7 @@ WITHOUT_IFADDRS=no - ARPING_DEFAULT_DEVICE= - - # nettle library for ipv6 ping [yes|no|static] --USE_NETTLE=yes -+USE_NETTLE=no - # libgcrypt library for ipv6 ping [no|yes|static] - USE_GCRYPT=no - # Crypto library for ping6 [shared|static|no] -@@ -53,7 +53,7 @@ ENABLE_RDISC_SERVER=no - # What a pity, all new gccs are buggy and -Werror does not work. Sigh. - # CFLAGS+=-fno-strict-aliasing -Wstrict-prototypes -Wall -Werror -g - CFLAGS?=-O3 -g --CFLAGS+=-fno-strict-aliasing -Wstrict-prototypes -Wall -+CFLAGS+=$(RPM_OPT_FLAGS) -fno-strict-aliasing -Wstrict-prototypes -Wall - CPPFLAGS+=-D_GNU_SOURCE - LDLIB= - diff --git a/SOURCES/ninfod-change-variable-name-to-avoid-colliding-with-function-name.patch b/SOURCES/ninfod-change-variable-name-to-avoid-colliding-with-function-name.patch deleted file mode 100644 index 7f41bbd..0000000 --- a/SOURCES/ninfod-change-variable-name-to-avoid-colliding-with-function-name.patch +++ /dev/null @@ -1,48 +0,0 @@ -From 18f9a84e0e702841d6cc4d5f593de4fbd1348e83 Mon Sep 17 00:00:00 2001 -From: Sami Kerola -Date: Sat, 28 Dec 2019 17:16:27 +0000 -Subject: [PATCH] ninfod: change variable name to avoid colliding with function - name - -The sys/capability.h header has 'extern int cap_setuid(uid_t uid);' -function prototype. - -Addresses: https://github.com/iputils/iputils/issues/246 -Signed-off-by: Sami Kerola ---- - ninfod/ninfod.c | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/ninfod/ninfod.c b/ninfod/ninfod.c -index 26112d0d..95583de4 100644 ---- a/ninfod/ninfod.c -+++ b/ninfod/ninfod.c -@@ -455,7 +455,7 @@ static void do_daemonize(void) - /* --------- */ - #ifdef HAVE_LIBCAP - static const cap_value_t cap_net_raw = CAP_NET_RAW; --static const cap_value_t cap_setuid = CAP_SETUID; -+static const cap_value_t cap_setuserid = CAP_SETUID; - static cap_flag_value_t cap_ok; - #else - static uid_t euid; -@@ -487,7 +487,7 @@ static void limit_capabilities(void) - - cap_get_flag(cap_cur_p, CAP_SETUID, CAP_PERMITTED, &cap_ok); - if (cap_ok != CAP_CLEAR) -- cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuid, CAP_SET); -+ cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuserid, CAP_SET); - - if (cap_set_proc(cap_p) < 0) { - DEBUG(LOG_ERR, "cap_set_proc: %s\n", strerror(errno)); -@@ -520,8 +520,8 @@ static void drop_capabilities(void) - - /* setuid / setuid */ - if (cap_ok != CAP_CLEAR) { -- cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuid, CAP_SET); -- cap_set_flag(cap_p, CAP_EFFECTIVE, 1, &cap_setuid, CAP_SET); -+ cap_set_flag(cap_p, CAP_PERMITTED, 1, &cap_setuserid, CAP_SET); -+ cap_set_flag(cap_p, CAP_EFFECTIVE, 1, &cap_setuserid, CAP_SET); - - if (cap_set_proc(cap_p) < 0) { - DEBUG(LOG_ERR, "cap_set_proc: %s\n", strerror(errno)); diff --git a/SOURCES/tracepath-fix-copying-input-ipv6-address.patch b/SOURCES/tracepath-fix-copying-input-ipv6-address.patch deleted file mode 100644 index c3edb1c..0000000 --- a/SOURCES/tracepath-fix-copying-input-ipv6-address.patch +++ /dev/null @@ -1,38 +0,0 @@ -From e0baf20067a75f093d690bd51a6db3f5afabca77 Mon Sep 17 00:00:00 2001 -From: Petr Vorel -Date: Tue, 17 Jul 2018 17:56:10 +0200 -Subject: [PATCH] tracepath: Fix copying input IPv6 address - -Commit e669c86 broke copying input IPv6 address. -tracepath recover from it, but it's slower. - -Previously was address too short: - - strace ./tracepath -6 fe80::8895:e2af:e96e:fd8f - sendto(3, "\1\0\0\0\0\0\0\0\307\36N[\0\0\0\0w_\f\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 127952, 0, {sa_family=AF_INET6, sin6_port=htons(44444), inet_pton(AF_INET6, "fe80::", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = -1 EMSGSIZE (Message too long) - -After fix is correct: - - sendto(3, "\1\0\0\0\0\0\0\0\300\36N[\0\0\0\0'B\3\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 127952, 0, {sa_family=AF_INET6, sin6_port=htons(44444), inet_pton(AF_INET6, "fe80::8895:e2af:e96e:fd8f", &sin6_addr), sin6_flowinfo=htonl(0), sin6_scope_id=0}, 28) = -1 EMSGSIZE (Message too long) - -Bug found by LTP test. - -Fixes: e669c86 tracepath: fix heap-buffer-overflow [asan] -Fixes: #137 ---- - tracepath.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tracepath.c b/tracepath.c -index 53bda16f..539a7a11 100644 ---- a/tracepath.c -+++ b/tracepath.c -@@ -475,7 +475,7 @@ int main(int argc, char **argv) - fd = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol); - if (fd < 0) - continue; -- memcpy(&target, ai->ai_addr, sizeof(*ai->ai_addr)); -+ memcpy(&target, ai->ai_addr, ai->ai_addrlen); - targetlen = ai->ai_addrlen; - break; - } diff --git a/SPECS/iputils.spec b/SPECS/iputils.spec index 971cd21..97c9291 100644 --- a/SPECS/iputils.spec +++ b/SPECS/iputils.spec @@ -3,7 +3,7 @@ Summary: Network monitoring tools including ping Name: iputils Version: 20180629 -Release: 9%{?dist} +Release: 10%{?dist} # some parts are under the original BSD (ping.c) # some are under GPLv2+ (tracepath.c) License: BSD and GPLv2+ @@ -18,12 +18,13 @@ Source3: ninfod.service Source4: bsd.txt Source5: https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt -Patch0: iputils-rh.patch -Patch1: iputils-ifenslave.patch -Patch2: iputils-freeaddrinfo.patch -Patch3: fix-incorrect-statistics.patch -Patch4: tracepath-fix-copying-input-ipv6-address.patch -Patch5: ninfod-change-variable-name-to-avoid-colliding-with-function-name.patch +Patch0: 0000-iputils-rh.patch +Patch1: 0001-iputils-ifenslave.patch +Patch2: 0002-iputils-freeaddrinfo.patch +Patch3: 0003-fix-incorrect-statistics.patch +Patch4: 0004-tracepath-fix-copying-input-ipv6-address.patch +Patch5: 0005-ninfod-change-variable-name-to-avoid-colliding-with-function-name.patch +Patch6: 0006-ping-Fix-unwanted-bell-on-unreachable-address.patch %if ! 0%{?_module_build} BuildRequires: docbook-utils perl-SGMLSpm @@ -68,6 +69,7 @@ cp %{SOURCE4} %{SOURCE5} . %patch3 -p1 %patch4 -p1 %patch5 -p1 +%patch6 -p1 %build %ifarch s390 s390x @@ -171,6 +173,9 @@ install -m 644 %SOURCE3 ${RPM_BUILD_ROOT}/%{_unitdir} %endif %changelog +* Tue Mar 22 2022 Jan Macku - 20180629-10 +- Fix regression of output when pinging unreachable IPv6 host (#2057570) + * Thu Feb 03 2022 Jan Macku - 20180629-9 - Fix copying input IPv6 address (#2047659)