RFR: 8332473: ubsan: growableArray.hpp:290:10: runtime error: null pointer passed as argument 1, which is declared to never be null
Magnus Ihse Bursie
ihse at openjdk.org
Wed May 22 08:37:10 UTC 2024
On Fri, 17 May 2024 16:21:57 GMT, Matthias Baesken <mbaesken at openjdk.org> wrote:
>> On Linux x86_64 fastdebug with ubsan enabled we run into this error because we call qsort with a first parameter that is null.
>>
>> /jdk/src/hotspot/share/utilities/growableArray.hpp:290:10: runtime error: null pointer passed as argument 1, which is declared to never be null
>> #0 0x150d701bb4b1 in GrowableArrayView<nmethod*>::sort(int (*)(nmethod**, nmethod**)) /jdk/src/hotspot/share/utilities/growableArray.hpp:290
>> #1 0x150d701bb4b1 in ClassUnloadingContext::free_nmethods() /jdk/src/hotspot/share/gc/shared/classUnloadingContext.cpp:159
>> #2 0x150d71f5cca3 in G1CollectedHeap::unload_classes_and_code(char const*, BoolObjectClosure*, GCTimer*) /jdk/src/hotspot/share/gc/g1/g1CollectedHeap.cpp:2538
>> #3 0x150d71ffb009 in G1FullCollector::phase1_mark_live_objects() /jdk/src/hotspot/share/gc/g1/g1FullCollector.cpp:330
>> #4 0x150d71ffc675 in G1FullCollector::collect() /jdk/src/hotspot/share/gc/g1/g1FullCollector.cpp:209
>> #5 0x150d71f3e593 in G1CollectedHeap::do_full_collection(bool, bool) /jdk/src/hotspot/share/gc/g1/g1CollectedHeap.cpp:842
>> #6 0x150d71f5b12d in G1CollectedHeap::satisfy_failed_allocation_helper(unsigned long, bool, bool, bool, bool*) /jdk/src/hotspot/share/gc/g1/g1CollectedHeap.cpp:917
>> #7 0x150d71f5b3dc in G1CollectedHeap::satisfy_failed_allocation(unsigned long, bool*) /jdk/src/hotspot/share/gc/g1/g1CollectedHeap.cpp:930
>> #8 0x150d721835f7 in VM_G1CollectForAllocation::doit() /jdk/src/hotspot/share/gc/g1/g1VMOperations.cpp:127
>> #9 0x150d74291ec8 in VM_Operation::evaluate() /jdk/src/hotspot/share/runtime/vmOperations.cpp:75
>> #10 0x150d742ca1be in VMThread::evaluate_operation(VM_Operation*) /jdk/src/hotspot/share/runtime/vmThread.cpp:283
>> #11 0x150d742cb9e7 in VMThread::inner_execute(VM_Operation*) /jdk/src/hotspot/share/runtime/vmThread.cpp:427
>> #12 0x150d742cc601 in VMThread::loop() /jdk/src/hotspot/share/runtime/vmThread.cpp:493
>> #13 0x150d742cc601 in VMThread::loop() /jdk/src/hotspot/share/runtime/vmThread.cpp:478
>>
>> seems we sometimes call qsort with nullptr as first parameter, this is not recommended.
>> When adding a guarantee the same can be seen (_data is null).
>> So better add a check and do not sort, if there is nothing provided to be sorted .
>
> Hi Johan, thanks for the review .
>
> btw seems I found a similar one
>
>
> /jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c:562:5: runtime error: null pointer passed as argument 2, which is declared to never be null
> #0 0x7fd95bec78d8 in spawnChild /jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c:562
> #1 0x7fd95bec78d8 in startChild /jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c:612
> #2 0x7fd95bec78d8 in Java_java_lang_ProcessImpl_forkAndExec /jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c:712
> #3 0x7fd93797a06d (<unknown module>)
>
>
> but here it is memcpy not qsort .
> ` memcpy(buf+offset, c->pdir, sp.dirlen);` gets a second parameter null.
> Something similar was discussed and fixed here https://bugs.python.org/issue27570 for Python .
>
> More info can be found here https://github.com/bellard/quickjs/issues/225
@MBaesken Thank you for your efforts of making the ubsan actually usable!
-------------
PR Comment: https://git.openjdk.org/jdk/pull/19283#issuecomment-2124192774
More information about the hotspot-dev
mailing list