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