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

[ubsan] Unsafe put operations to e.g. adress 0 cause UndefinedBehaviorSanitizer:DEADLYSIGNAL SEGV on macOS/AIX

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Unresolved
    • Icon: P4 P4
    • None
    • 21, 25
    • hotspot
    • None
    • generic
    • generic

      A couple of tests e.g. VendorInfoPluginsTest but also some Hotspot crash tests put (write) to special addresses like 0 to provoke crashs.
      However this does not work well with ubsan on the clang based platforms (macOS, AIX).

      See the following issues :
      tools/jlink/plugins/VendorInfoPluginsTest

      AIX

      WARNING: sun.misc.Unsafe::putLong will be removed in a future release
      UndefinedBehaviorSanitizer:DEADLYSIGNAL
      ==11928028==ERROR: UndefinedBehaviorSanitizer: SEGV on unknown address 0x000000000000 (pc 0x90000000f303da8 bp 0x0001102dcb10 sp 0x0001102dcb10 T46137665)
      ==11928028==The signal is caused by a UNKNOWN memory access.
      ==11928028==Hint: address points to the zero page.
      /opt/IBM/openxlC/17.1.2/tools/.ibm-llvm-symbolizer.orig: error: 'shmid:244319769 ': No such file or directory
      /opt/IBM/openxlC/17.1.2/tools/.ibm-llvm-symbolizer.orig: error: '/usr/lib/libpthread.a': No object file for requested architecture
          #0 0x90000000f303da8 in MemoryAccess<long>::put(long) make/hotspot/src/hotspot/share/prims/unsafe.cpp:250
          #1 0x90000000f303da8 in Unsafe_PutLong(JNIEnv_*, _jobject*, _jobject*, long, long) make/hotspot/src/hotspot/share/prims/unsafe.cpp:319
          #2 0xa0001000741df08 (shmid:244319769 +0x741df08)
          #3 0xa00010007418298 (shmid:244319769 +0x7418298)
          #4 0xa00010007418298 (shmid:244319769 +0x7418298)
          #5 0xa00010007418298 (shmid:244319769 +0x7418298)
          #6 0xa00010007410838 (shmid:244319769 +0x7410838)
          #7 0x90000000f367468 in JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*) make/hotspot/src/hotspot/share/runtime/javaCalls.cpp:415
          #8 0x90000000f36aef8 in os::os_exception_wrapper(void (*)(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*), JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*) make/hotspot/src/hotspot/os/aix/os_aix.cpp:2395
          #9 0x90000000f366eac in JavaCalls::call(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*) make/hotspot/src/hotspot/share/runtime/javaCalls.cpp:323
          #10 0x90000000f8701cc in jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, JavaThread*) make/hotspot/src/hotspot/share/prims/jni.cpp:883
          #11 0x90000000f874988 in jni_CallStaticVoidMethod make/hotspot/src/hotspot/share/prims/jni.cpp:1712

      macOS aarch64 :

      UndefinedBehaviorSanitizer:DEADLYSIGNAL
      ==96389==ERROR: UndefinedBehaviorSanitizer: SEGV on unknown address 0x000000000000 (pc 0x00010a258274 bp 0x00016b136820 sp 0x00016b136800 T-1878550938)
      ==96389==The signal is caused by a WRITE memory access.
      ==96389==Hint: address points to the zero page.
          #0 0x10a258274 in MemoryAccess<long>::put(long) unsafe.cpp:250
          #1 0x10a2521ec in Unsafe_PutLong(JNIEnv_*, _jobject*, _jobject*, long, long) unsafe.cpp:319
          #2 0x112e1463c (<unknown module>)
          #3 0x112e10a8c (<unknown module>)
          #4 0x112e10a8c (<unknown module>)
          #5 0x112e10a8c (<unknown module>)
          #6 0x112e0c150 (<unknown module>)
          #7 0x10999daa8 in JavaCalls::call_helper(JavaValue*, methodHandle const&, JavaCallArguments*, JavaThread*) javaCalls.cpp:415
          #8 0x109a7402c in jni_invoke_static(JNIEnv_*, JavaValue*, _jobject*, JNICallType, _jmethodID*, JNI_ArgumentPusher*, JavaThread*) jni.cpp:883
          #9 0x109a76e20 in jni_CallStaticVoidMethod jni.cpp:1712
          #10 0x105415fb0 in invokeStaticMainWithArgs java.c:392
          #11 0x105418288 in JavaMain java.c:640
          #12 0x10541d53c in ThreadJavaMain java_md_macosx.m:679
          #13 0x1936fef90 in _pthread_start+0x84 (libsystem_pthread.dylib:arm64e+0x6f90)
          #14 0x1936f9d30 in thread_start+0x4 (libsystem_pthread.dylib:arm64e+0x1d30)

      On gcc we solved the same issue by ATTRIBUTE_NO_UBSAN to the put method in unsafe.cpp ; but this seems not to work with clang.

            Unassigned Unassigned
            mbaesken Matthias Baesken
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

              Created:
              Updated: