From 00309eea27470b140b9d5998dbe21fbb0946d2a8 Mon Sep 17 00:00:00 2001 From: James Addison Date: Mon, 25 Jan 2021 15:30:03 +0000 Subject: [PATCH] src: read exactly two tokens from Linux THP sysfs config There was an unexpected and hard-to-spot issue here: the /sys/kernel/mm/transparent_hugepage/enabled file contains three entries, and the std::ifstream reader was reading two values on each loop iteration, resulting in incorrect behaviour. Fixes: https://github.com/nodejs/node/issues/37064 PR-URL: https://github.com/nodejs/node/pull/37065 Reviewed-By: Darshan Sen Reviewed-By: Rich Trott Reviewed-By: James M Snell --- src/large_pages/node_large_page.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/large_pages/node_large_page.cc b/src/large_pages/node_large_page.cc index a4b109d1b0ef69..22810ef08fb878 100644 --- a/src/large_pages/node_large_page.cc +++ b/src/large_pages/node_large_page.cc @@ -260,6 +260,8 @@ struct text_region FindNodeTextRegion() { bool IsTransparentHugePagesEnabled() { std::ifstream ifs; + // File format reference: + // https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/mm/huge_memory.c?id=13391c60da3308ed9980de0168f74cce6c62ac1d#n163 ifs.open("/sys/kernel/mm/transparent_hugepage/enabled"); if (!ifs) { PrintWarning("could not open /sys/kernel/mm/transparent_hugepage/enabled"); @@ -268,7 +270,7 @@ bool IsTransparentHugePagesEnabled() { std::string always, madvise; if (ifs.is_open()) { - while (ifs >> always >> madvise) {} + ifs >> always >> madvise; } ifs.close();