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

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

    XMLWordPrintable

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: P4
    • Resolution: Fixed
    • Affects Version/s: 11, 12, 13, 14, 15, 16
    • Fix Version/s: 16
    • Component/s: hotspot
    • Environment:

      Debug only

    • Subcomponent:
    • Resolved In Build:
      b11
    • OS:
      linux

      Description

      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.

        Attachments

          Issue Links

            Activity

              People

              Assignee:
              dholmes David Holmes
              Reporter:
              dholmes David Holmes
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Dates

                Created:
                Updated:
                Resolved: