RFR (s) 8251383: Disable Event::log from linux_mprotect when processing the assertion poison page
Daniel D. Daugherty
daniel.daugherty at oracle.com
Tue Aug 11 16:22:51 UTC 2020
On 8/11/20 5:17 AM, David Holmes wrote:
> Bug: https://bugs.openjdk.java.net/browse/JDK-8251383
> webrev: http://cr.openjdk.java.net/~dholmes/8251383/webrev/
src/hotspot/os/linux/os_linux.cpp
No comments.
Thumbs up.
Dan
>
> When the assertion poison page is enabled (Linux only and on by
> default) the signal handler will call os::protect_memory to change the
> page protection bits. That will call linux_mprotect which will call
>
> Events::log(NULL, "Protecting memory [" INTPTR_FORMAT ","
> INTPTR_FORMAT "] with protection modes %x", p2i(bottom),
> p2i(bottom+size), prot);
>
> Event logging in turn can use Mutexes and other VM facilities - all of
> which are now being executed in a signal handling context (which is
> inherently unsafe). It also means that there cannot be any other
> failing assertions on that path as you will re-trigger the poison page
> pagefault and abort with no hs_err file. Hence, as happened to me, a
> failing assertion in the mutex code triggers this problem.
>
> The issue can be worked-around by setting -XX:-ShowRegistersOnAssert
> (once you realise what is happening).
>
> The simple fix is to skip the logging if the faulting address is the
> poison page address.
>
> This only affects debug builds of course.
>
> Testing:
> - runtime/ErrorHandling
> - tier 1-3
>
> Thanks,
> David
More information about the hotspot-runtime-dev
mailing list