aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChen Qi <Qi.Chen@windriver.com>2017-09-07 10:37:10 +0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-09-11 17:30:13 +0100
commit818d4a97763c69e9289fb99822535cd3ca7af6a2 (patch)
tree421b1c894886c2754da4ae4c9fc0f631f6d0e1af
parent56cf3a05bcc3329b32d28962089f9229a63f655a (diff)
downloadopenembedded-core-contrib-818d4a97763c69e9289fb99822535cd3ca7af6a2.tar.gz
openembedded-core-contrib-818d4a97763c69e9289fb99822535cd3ca7af6a2.tar.bz2
openembedded-core-contrib-818d4a97763c69e9289fb99822535cd3ca7af6a2.zip
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. Signed-off-by: Chen Qi <Qi.Chen@windriver.com> Signed-off-by: Ross Burton <ross.burton@intel.com>
-rw-r--r--meta/recipes-extended/iputils/files/arping-fix-arping-hang-if-SIGALRM-is-blocked.patch44
-rw-r--r--meta/recipes-extended/iputils/iputils_s20151218.bb1
2 files changed, 45 insertions, 0 deletions
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 00000000000..7b56276b399
--- /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 <rprior@dcc.fc.up.pt>
+RH-Bugzilla: #1085971
+Signed-off-by: Jan Synacek <jsynacek@redhat.com>
+Signed-off-by: Zhenbo Gao <zhenbo.gao@windriver.com>
+
+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 0d4dd1b17c5..46de6fc4446 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"