From 5764589c3d668388e8fe5f3ca4e55487f1db35cd Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Thu, 7 Sep 2017 10:37:10 +0800 Subject: iputils: backport patch to fix arping hang problem arping hangs if SIGALARM is blocked. Backport a patch to fix this problem. Unblock SIGALRM so that the previously called alarm() can prevent recvfrom() from blocking forever in case the inherited procmask is blocking SIGALRM and no packet is received. (From OE-Core rev: 818d4a97763c69e9289fb99822535cd3ca7af6a2) Signed-off-by: Chen Qi Signed-off-by: Ross Burton Signed-off-by: Richard Purdie --- ...ing-fix-arping-hang-if-SIGALRM-is-blocked.patch | 44 ++++++++++++++++++++++ meta/recipes-extended/iputils/iputils_s20151218.bb | 1 + 2 files changed, 45 insertions(+) create mode 100644 meta/recipes-extended/iputils/files/arping-fix-arping-hang-if-SIGALRM-is-blocked.patch (limited to 'meta/recipes-extended') diff --git a/meta/recipes-extended/iputils/files/arping-fix-arping-hang-if-SIGALRM-is-blocked.patch b/meta/recipes-extended/iputils/files/arping-fix-arping-hang-if-SIGALRM-is-blocked.patch new file mode 100644 index 0000000000..7b56276b39 --- /dev/null +++ b/meta/recipes-extended/iputils/files/arping-fix-arping-hang-if-SIGALRM-is-blocked.patch @@ -0,0 +1,44 @@ +arping: fix arping hang if SIGALRM is blocked + +Unblock SIGALRM so that the previously called alarm() can prevent +recvfrom() from blocking forever in case the inherited procmask is +blocking SIGALRM and no packet is received. + +Upstream-Status: Backport + +Reported-by: Rui Prior +RH-Bugzilla: #1085971 +Signed-off-by: Jan Synacek +Signed-off-by: Zhenbo Gao + +diff --git a/arping.c.orig b/arping.c +index 35408c1..2098159 100644 +--- a/arping.c.orig ++++ b/arping.c +@@ -1215,16 +1215,22 @@ main(int argc, char **argv) + socklen_t alen = sizeof(from); + int cc; + ++ sigemptyset(&sset); ++ sigaddset(&sset, SIGALRM); ++ sigaddset(&sset, SIGINT); ++ /* Unblock SIGALRM so that the previously called alarm() ++ * can prevent recvfrom from blocking forever in case the ++ * inherited procmask is blocking SIGALRM and no packet ++ * is received. */ ++ sigprocmask(SIG_UNBLOCK, &sset, &osset); ++ + if ((cc = recvfrom(s, packet, sizeof(packet), 0, + (struct sockaddr *)&from, &alen)) < 0) { + perror("arping: recvfrom"); + continue; + } + +- sigemptyset(&sset); +- sigaddset(&sset, SIGALRM); +- sigaddset(&sset, SIGINT); +- sigprocmask(SIG_BLOCK, &sset, &osset); ++ sigprocmask(SIG_BLOCK, &sset, NULL); + recv_pack(packet, cc, (struct sockaddr_ll *)&from); + sigprocmask(SIG_SETMASK, &osset, NULL); + } diff --git a/meta/recipes-extended/iputils/iputils_s20151218.bb b/meta/recipes-extended/iputils/iputils_s20151218.bb index 0d4dd1b17c..46de6fc444 100644 --- a/meta/recipes-extended/iputils/iputils_s20151218.bb +++ b/meta/recipes-extended/iputils/iputils_s20151218.bb @@ -20,6 +20,7 @@ SRC_URI = "http://www.skbuff.net/iputils/${BPN}-${PV}.tar.bz2 \ file://nsgmls-path-fix.patch \ file://0001-Fix-header-inclusion-for-musl.patch \ file://0001-Intialize-struct-elements-by-name.patch \ + file://arping-fix-arping-hang-if-SIGALRM-is-blocked.patch \ " SRC_URI[md5sum] = "8aaa7395f27dff9f57ae016d4bc753ce" -- cgit v1.2.3-54-g00ecf