From 562227aa9bfbc9c4b6afb4fbb7dcffce797a8901 Mon Sep 17 00:00:00 2001 From: lean Date: Mon, 21 Jun 2021 11:52:55 +0800 Subject: [PATCH] urngd: fix busy loop in case of ioctl cause high cpu usage Signed-off-by: Tianling Shen --- package/system/urngd/Makefile | 10 +++++----- .../100-fix-high-cpu-usage-with-docker.patch | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 5 deletions(-) create mode 100644 package/system/urngd/patches/100-fix-high-cpu-usage-with-docker.patch diff --git a/package/system/urngd/Makefile b/package/system/urngd/Makefile index dc20b0541d..bfee184701 100644 --- a/package/system/urngd/Makefile +++ b/package/system/urngd/Makefile @@ -1,7 +1,7 @@ include $(TOPDIR)/rules.mk PKG_NAME:=urngd -PKG_RELEASE:=1 +PKG_RELEASE:=2 PKG_SOURCE_PROTO:=git PKG_SOURCE_URL=$(PROJECT_GIT)/project/urngd.git @@ -15,14 +15,14 @@ PKG_LICENSE_FILES:= include $(INCLUDE_DIR)/package.mk include $(INCLUDE_DIR)/cmake.mk -define Package/$(PKG_NAME) +define Package/urngd SECTION:=utils CATEGORY:=Base system TITLE:=OpenWrt non-physical true random number generator based on timing jitter DEPENDS:=+libubox endef -define Package/$(PKG_NAME)/description +define Package/urngd/description urngd is OpenWrt's micro non-physical true random number generator based on timing jitter. @@ -36,11 +36,11 @@ define Package/$(PKG_NAME)/description Jitter RNGd provides a source of sufficient entropy. endef -define Package/$(PKG_NAME)/install +define Package/urngd/install $(INSTALL_DIR) $(1)/etc/init.d $(INSTALL_BIN) ./files/$(PKG_NAME).init $(1)/etc/init.d/$(PKG_NAME) $(INSTALL_DIR) $(1)/sbin $(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/sbin/$(PKG_NAME) endef -$(eval $(call BuildPackage,$(PKG_NAME))) +$(eval $(call BuildPackage,urngd)) diff --git a/package/system/urngd/patches/100-fix-high-cpu-usage-with-docker.patch b/package/system/urngd/patches/100-fix-high-cpu-usage-with-docker.patch new file mode 100644 index 0000000000..314e246d35 --- /dev/null +++ b/package/system/urngd/patches/100-fix-high-cpu-usage-with-docker.patch @@ -0,0 +1,19 @@ +diff --git a/urngd.c b/urngd.c +index 35ccdec..410d300 100644 +--- a/urngd.c ++++ b/urngd.c +@@ -129,9 +129,14 @@ static size_t gather_entropy(struct urngd *u) + static void low_entropy_cb(struct uloop_fd *ufd, unsigned int events) + { + struct urngd *u = container_of(ufd, struct urngd, rnd_fd); ++ size_t res; + + DEBUG(2, DEV_RANDOM " signals low entropy\n"); +- gather_entropy(u); ++ res = gather_entropy(u); ++ if (!res) { ++ DEBUG(2, "gather_entropy failed, delaying further attempts\n"); ++ sleep(60); ++ } + } +