Skip to content

Commit 3f889a8

Browse files
committed
8312394: [linux] SIGSEGV if kernel was built without hugepage support
Backport-of: 94eb44b192ba421692549a178c386ea34164ea50
1 parent 4909911 commit 3f889a8

File tree

1 file changed

+20
-16
lines changed

1 file changed

+20
-16
lines changed

src/hotspot/os/linux/hugepages.cpp

+20-16
Original file line numberDiff line numberDiff line change
@@ -111,20 +111,22 @@ static os::PageSizes scan_hugepages() {
111111

112112
os::PageSizes pagesizes;
113113

114-
DIR *dir = opendir(sys_hugepages);
115-
116-
struct dirent *entry;
117-
size_t pagesize;
118-
while ((entry = readdir(dir)) != nullptr) {
119-
if (entry->d_type == DT_DIR &&
120-
sscanf(entry->d_name, "hugepages-%zukB", &pagesize) == 1) {
121-
// The kernel is using kB, hotspot uses bytes
122-
// Add each found Large Page Size to page_sizes
123-
pagesize *= K;
124-
pagesizes.add(pagesize);
114+
DIR* dir = opendir(sys_hugepages);
115+
116+
if (dir != nullptr) {
117+
struct dirent *entry;
118+
size_t pagesize;
119+
while ((entry = readdir(dir)) != nullptr) {
120+
if (entry->d_type == DT_DIR &&
121+
sscanf(entry->d_name, "hugepages-%zukB", &pagesize) == 1) {
122+
// The kernel is using kB, hotspot uses bytes
123+
// Add each found Large Page Size to page_sizes
124+
pagesize *= K;
125+
pagesizes.add(pagesize);
126+
}
125127
}
128+
closedir(dir);
126129
}
127-
closedir(dir);
128130

129131
return pagesizes;
130132
}
@@ -142,11 +144,13 @@ void StaticHugePageSupport::print_on(outputStream* os) {
142144
}
143145

144146
void StaticHugePageSupport::scan_os() {
145-
_pagesizes = scan_hugepages();
146147
_default_hugepage_size = scan_default_hugepagesize();
147-
assert(_pagesizes.contains(_default_hugepage_size),
148-
"Unexpected configuration: default pagesize (" SIZE_FORMAT ") "
149-
"has no associated directory in /sys/kernel/mm/hugepages..", _default_hugepage_size);
148+
if (_default_hugepage_size > 0) {
149+
_pagesizes = scan_hugepages();
150+
assert(_pagesizes.contains(_default_hugepage_size),
151+
"Unexpected configuration: default pagesize (" SIZE_FORMAT ") "
152+
"has no associated directory in /sys/kernel/mm/hugepages..", _default_hugepage_size);
153+
}
150154
_initialized = true;
151155
LogTarget(Info, pagesize) lt;
152156
if (lt.is_enabled()) {

0 commit comments

Comments
 (0)