From 481f8bc2bd1662d6bc52e5c8af79c37b7d266b53 Mon Sep 17 00:00:00 2001 From: Wenlin Kang Date: Mon, 18 Feb 2019 18:30:57 -0800 Subject: openjdk-8: fix a random crash on JNI_CreateJavaVM When call JNI_CreateJavaVM API, sometimes it will crash(we have reproduced it on quemuppc), this patch fixes it. Signed-off-by: Wenlin Kang Signed-off-by: Richard Leitner --- .../openjdk/openjdk-8-release-172b11-common.inc | 1 + ...001-hotspot-fix-crash-on-JNI_CreateJavaVM.patch | 36 ++++++++++++++++++++++ 2 files changed, 37 insertions(+) create mode 100644 recipes-core/openjdk/patches-openjdk-8/0001-hotspot-fix-crash-on-JNI_CreateJavaVM.patch diff --git a/recipes-core/openjdk/openjdk-8-release-172b11-common.inc b/recipes-core/openjdk/openjdk-8-release-172b11-common.inc index d4e80f6..f50b494 100644 --- a/recipes-core/openjdk/openjdk-8-release-172b11-common.inc +++ b/recipes-core/openjdk/openjdk-8-release-172b11-common.inc @@ -21,6 +21,7 @@ PATCHES_URI = "\ ${LIBPNG_NEON_PATCH} \ file://handle_extra_output.patch \ file://hotspot-handle-gcc7-format-overflow.patch \ + file://0001-hotspot-fix-crash-on-JNI_CreateJavaVM.patch \ " HOTSPOT_UB_PATCH = "\ file://0014-hotspot-zero-fix-undefined-behaviour-gcc-v8-fix.patch \ diff --git a/recipes-core/openjdk/patches-openjdk-8/0001-hotspot-fix-crash-on-JNI_CreateJavaVM.patch b/recipes-core/openjdk/patches-openjdk-8/0001-hotspot-fix-crash-on-JNI_CreateJavaVM.patch new file mode 100644 index 0000000..4618b6b --- /dev/null +++ b/recipes-core/openjdk/patches-openjdk-8/0001-hotspot-fix-crash-on-JNI_CreateJavaVM.patch @@ -0,0 +1,36 @@ +From d0ebd6f108df9b0f9533de6f16280ceec136d8e6 Mon Sep 17 00:00:00 2001 +From: Wenlin Kang +Date: Sun, 17 Feb 2019 22:38:33 -0800 +Subject: [PATCH] hotspot: fix crash on JNI_CreateJavaVM + +In function os::pd_create_stack_guard_pages(char* addr, size_t size), +when addr < os::Linux::initial_thread_stack_bottom(), usually munmap() +will not be called, but when mincore()==-1, get_stack_commited_bottom() +will make stack_extent < os::Linux::initial_thread_stack_bottom() and +stack_extent < addr too, then munmap() is called, in such case, it may +cause segment(we have reproduced it on linux_PPC). + +Upstream-Status: Pending + +Signed-off-by: Wenlin Kang +--- + hotspot/src/os/linux/vm/os_linux.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hotspot/src/os/linux/vm/os_linux.cpp b/hotspot/src/os/linux/vm/os_linux.cpp +index 044a70a6..b8246ce4 100644 +--- a/hotspot/src/os/linux/vm/os_linux.cpp ++++ b/hotspot/src/os/linux/vm/os_linux.cpp +@@ -3078,7 +3078,8 @@ bool os::pd_create_stack_guard_pages(char* addr, size_t size) { + uintptr_t stack_extent = (uintptr_t) os::Linux::initial_thread_stack_bottom(); + unsigned char vec[1]; + +- if (mincore((address)stack_extent, os::vm_page_size(), vec) == -1) { ++ if ((mincore((address)stack_extent, os::vm_page_size(), vec) == -1) ++ && ((size_t)addr > (size_t)stack_extent)) { + // Fallback to slow path on all errors, including EAGAIN + stack_extent = (uintptr_t) get_stack_commited_bottom( + os::Linux::initial_thread_stack_bottom(), +-- +2.17.1 + -- cgit v1.2.3-54-g00ecf