Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8251383

Disable Event::log from linux_mprotect when processing the assertion poison page

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P4 P4
    • 16
    • 11, 12, 13, 14, 15, 16
    • hotspot
    • Debug only

    • b11
    • linux

      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. 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.

            dholmes David Holmes
            dholmes David Holmes
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated:
              Resolved: