From a59c87b7007130d1cd81a2de66a9ac3b248a118c Mon Sep 17 00:00:00 2001 From: Jan Macku Date: Wed, 28 Aug 2024 13:06:49 +0200 Subject: [PATCH] arping: Fix 1s delay on exit for unsolicited arpings Resolves: RHEL-34110 --- .gitignore | 22 +------ ...elay-on-exit-for-unsolicited-arpings.patch | 40 ++++++++++++ ...x-unsolicited-ARP-regressions-on-c-1.patch | 61 +++++++++++++++++++ iputils.spec | 7 ++- 4 files changed, 109 insertions(+), 21 deletions(-) create mode 100644 002-arping-Fix-1s-delay-on-exit-for-unsolicited-arpings.patch create mode 100644 003-arping-Fix-unsolicited-ARP-regressions-on-c-1.patch diff --git a/.gitignore b/.gitignore index 02d0422..c86801f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,21 +1,3 @@ -iputils-s20100418.tar.bz2 -ifenslave.tar.gz -/iputils-s20101006.tar.bz2 /ifenslave.tar.gz -/iputils-s20121011.tar.bz2 -/iputils-s20121106.tar.bz2 -/iputils-s20121112.tar.bz2 -/iputils-s20121121.tar.bz2 -/iputils-s20121125.tar.bz2 -/iputils-s20121205.tar.bz2 -/iputils-s20121207.tar.bz2 -/iputils-s20121221.tar.bz2 -/iputils-s20140519.tar.gz -/iputils-s20150815.tar.gz -/iputils-s20160308.tar.gz -/iputils-s20161105.tar.gz -/iputils-s20180629.tar.gz -/iputils-s20190324.tar.gz -/iputils-s20190515.tar.gz -/iputils-s20200821.tar.gz -/iputils-20210202.tar.gz +/iputils-* + diff --git a/002-arping-Fix-1s-delay-on-exit-for-unsolicited-arpings.patch b/002-arping-Fix-1s-delay-on-exit-for-unsolicited-arpings.patch new file mode 100644 index 0000000..c2fdf31 --- /dev/null +++ b/002-arping-Fix-1s-delay-on-exit-for-unsolicited-arpings.patch @@ -0,0 +1,40 @@ +From a1890739e9d5953897cec43c59d5fea922384d5b Mon Sep 17 00:00:00 2001 +From: Petr Vorel +Date: Wed, 22 May 2024 07:05:14 +0200 +Subject: [PATCH 1/2] arping: Fix 1s delay on exit for unsolicited arpings + +Commit 67e070d introduced 1s poll() delay for unsolicited arpings, +when using -U or -A, e.g.: + + # arping -A -c1 -I eth0 [IP address of eth0 interface] + # arping -U -c1 -I eth0 [IP address of eth0 interface] + +Restore correct condition. + +Fixes: 67e070d ("arping: use signalfd() and timerfd() rather than signals") +Fixes: https://github.com/iputils/iputils/issues/536 +Closes: https://github.com/iputils/iputils/pull/541 +Reported-by: +Suggested-by: +Signed-off-by: Petr Vorel +(cherry picked from commit 4db1de672559804bebcb7073d231924339ca8cd8) +--- + arping.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/arping.c b/arping.c +index 53fdbb4..8929f8f 100644 +--- a/arping.c ++++ b/arping.c +@@ -749,7 +749,7 @@ static int event_loop(struct run_state *ctl) + pfds[POLLFD_SOCKET].events = POLLIN | POLLERR | POLLHUP; + send_pack(ctl); + +- while (!exit_loop) { ++ while (!(exit_loop || ctl->unsolicited)) { + int ret; + size_t i; + +-- +2.46.0 + diff --git a/003-arping-Fix-unsolicited-ARP-regressions-on-c-1.patch b/003-arping-Fix-unsolicited-ARP-regressions-on-c-1.patch new file mode 100644 index 0000000..fee6506 --- /dev/null +++ b/003-arping-Fix-unsolicited-ARP-regressions-on-c-1.patch @@ -0,0 +1,61 @@ +From 5564dd9f224a7354a55c8f57ac0da9c2e58b18e5 Mon Sep 17 00:00:00 2001 +From: Petr Vorel +Date: Fri, 24 May 2024 00:05:53 +0200 +Subject: [PATCH 2/2] arping: Fix unsolicited ARP regressions on -c > 1 + +4db1de6 tried to fix a regression 1 sec delay due poll() for unsolicited +ARP, .i.e. -A and -U (introduced in 67e070d, reported as issue #536). +But skipping the while loop entirely introduced another regression for +-A and -U, which behave like -c1 (sending *always* only a single packet). + +Fixing it by checking in while loop and comparing also count (as it was +done in 67e070d before the rewrite). + +NOTE: use exit_loop with continue instead of simple break to keep things +consistent. + +Fixes: 4db1de6 ("arping: Fix 1s delay on exit for unsolicited arpings") +Fixes: 67e070d ("arping: use signalfd() and timerfd() rather than signals") +Fixes: https://github.com/iputils/iputils/issues/536 +Closes: https://github.com/iputils/iputils/pull/543 +Reported-by: David Bond +Reviewed-by: Andrea Cervesato +Reviewed-by: Cyril Hrubis +Signed-off-by: Petr Vorel +(cherry picked from commit 5de892d15eea467775420c4fd641df229f024259) +--- + arping.c | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +diff --git a/arping.c b/arping.c +index 8929f8f..ee9da1d 100644 +--- a/arping.c ++++ b/arping.c +@@ -749,10 +749,15 @@ static int event_loop(struct run_state *ctl) + pfds[POLLFD_SOCKET].events = POLLIN | POLLERR | POLLHUP; + send_pack(ctl); + +- while (!(exit_loop || ctl->unsolicited)) { ++ while (!exit_loop) { + int ret; + size_t i; + ++ if ((ctl->sent == ctl->count) && ctl->unsolicited) { ++ exit_loop = 1; ++ continue; ++ } ++ + ret = poll(pfds, POLLFD_COUNT, -1); + if (ret <= 0) { + if (errno == EAGAIN) +@@ -813,6 +818,7 @@ static int event_loop(struct run_state *ctl) + } + } + } ++ + close(sfd); + close(tfd); + freeifaddrs(ctl->ifa0); +-- +2.46.0 + diff --git a/iputils.spec b/iputils.spec index f41dad4..4c2910b 100644 --- a/iputils.spec +++ b/iputils.spec @@ -3,7 +3,7 @@ Summary: Network monitoring tools including ping Name: iputils Version: 20210202 -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+ @@ -20,6 +20,8 @@ Source5: https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt # Upstream patches Patch001: 001-ping-remove-unsupported-IPv6-warning-on-disabled-IPv6.patch +Patch002: 002-arping-Fix-1s-delay-on-exit-for-unsolicited-arpings.patch +Patch003: 003-arping-Fix-unsolicited-ARP-regressions-on-c-1.patch # Downstream-only patches Patch100: 100-iputils-ifenslave.patch @@ -130,6 +132,9 @@ install -cp ifenslave.8 ${RPM_BUILD_ROOT}%{_mandir}/man8/ %attr(644,root,root) %{_mandir}/man8/ninfod.8.gz %changelog +* Wed Aug 28 2024 Jan Macku - 20210202-10 +- arping: Fix 1s delay on exit for unsolicited arpings + * Wed May 03 2023 Jan Macku - 20210202-9 - ping: Remove 'unsupported IPv6' warning on disabled IPv6 (rhbz#2152511)