summaryrefslogtreecommitdiff
path: root/net-misc/iputils/files/iputils-20200821-getrandom-fallback.patch
diff options
context:
space:
mode:
Diffstat (limited to 'net-misc/iputils/files/iputils-20200821-getrandom-fallback.patch')
-rw-r--r--net-misc/iputils/files/iputils-20200821-getrandom-fallback.patch43
1 files changed, 43 insertions, 0 deletions
diff --git a/net-misc/iputils/files/iputils-20200821-getrandom-fallback.patch b/net-misc/iputils/files/iputils-20200821-getrandom-fallback.patch
new file mode 100644
index 000000000000..5b69e5c88fb7
--- /dev/null
+++ b/net-misc/iputils/files/iputils-20200821-getrandom-fallback.patch
@@ -0,0 +1,43 @@
+From 469b41ac89b9f6772ea31df8379669d205be95f8 Mon Sep 17 00:00:00 2001
+From: Nuno Silva <nuno.m.ribeiro.silva@tecnico.ulisboa.pt>
+Date: Mon, 24 Aug 2020 19:34:53 +0100
+Subject: [PATCH] common: fix infinite loop when getrandom fails
+
+Fixes: https://github.com/iputils/iputils/issues/291
+---
+ iputils_common.c | 14 ++++++++++----
+ 1 file changed, 10 insertions(+), 4 deletions(-)
+
+diff --git a/iputils_common.c b/iputils_common.c
+index 58eacd0..c41f201 100644
+--- a/iputils_common.c
++++ b/iputils_common.c
+@@ -98,18 +98,24 @@ static unsigned int iputil_srand_fallback(void)
+ void iputils_srand(void)
+ {
+ unsigned int i;
++
+ #if HAVE_GETRANDOM
+ ssize_t ret;
+
+- while ((ret = getrandom(&i, sizeof(i), GRND_NONBLOCK)) != sizeof(i)) {
+- switch(errno) {
++ do {
++ errno = 0;
++ ret = getrandom(&i, sizeof(i), GRND_NONBLOCK);
++ switch (errno) {
++ case 0:
++ break;
+ case EINTR:
+ continue;
+ default:
+ i = iputil_srand_fallback();
+- break;
++ goto done;
+ }
+- }
++ } while (ret != sizeof(i));
++ done:
+ #else
+ i = iputil_srand_fallback();
+ #endif