RFR 8212937: Parent class loader may not have a referred ClassLoaderData instance when obtained in Klass::class_in_module_of_loader
Lois Foltan
lois.foltan at oracle.com
Thu Nov 1 12:44:29 UTC 2018
Thank you Martin for the review!
Lois
On 10/30/2018 9:33 PM, Martin Balao wrote:
> Hi Lois,
>
> Thanks for your proposal. I'm not a reviewer but it looks good to me too.
>
> Kind regards,
> Martin.-
>
> On Mon, Oct 29, 2018 at 4:47 PM, Lois Foltan <lois.foltan at oracle.com
> <mailto:lois.foltan at oracle.com>> wrote:
>
> On 10/25/2018 11:15 AM, Martin Balao wrote:
>
>> Hi Lois,
>>
>> Thanks for having a look at this.
>>
>> Yes, I have a test that triggers this execution path.
>> Unfortunately, this is a security test that I cannot publicly
>> share. What I can tell you, though, is that the parent class
>> loader is a "delegating class loader" which never defined a class
>> and that's the reason why it doesn't have a ClassLoaderData
>> instance created.
>>
>> I'm not sure if this would be needed in other places where the
>> idiom is not used. The reason is that there might be any other
>> implicit assumptions that makes it impossible. That's why I
>> limited the scope of this changeset to the only case that I'm
>> sure it's possible to trigger.
>
> Hi Martin,
>
> I wrote a test case that reproduces this failure and demonstrates
> that invoking SystemDictionary::register_loader() will not work.
> With a non-product (fastdebug) build, the test case shows that
> calling register_loader is problematic, a SystemDictionary lock is
> currently held and acquiring a ClassLoaderDataGraph lock to create
> the new ClassLoaderData causes an out of order locking fatal error.
>
> Please consider this test case and proposed change:
> http://cr.openjdk.java.net/~lfoltan/bug_jdk8212937/webrev/
> <http://cr.openjdk.java.net/%7Elfoltan/bug_jdk8212937/webrev/>
>
> Thanks,
> Lois
>
>>
>> Kind regards,
>> Martin.-
>>
>> On Wed, Oct 24, 2018 at 5:52 PM, Lois Foltan
>> <lois.foltan at oracle.com <mailto:lois.foltan at oracle.com>> wrote:
>>
>> On 10/24/2018 3:58 PM, Martin Balao wrote:
>>
>> Hi,
>>
>> Can I have a review for JDK-8212937 [1]?
>>
>> Webrev.00:
>>
>> *
>> http://cr.openjdk.java.net/~mbalao/webrevs/8212937/8212937.webrev.00/
>> <http://cr.openjdk.java.net/%7Embalao/webrevs/8212937/8212937.webrev.00/>
>> *
>> http://cr.openjdk.java.net/~mbalao/webrevs/8212937/8212937.webrev.00.zip
>> <http://cr.openjdk.java.net/%7Embalao/webrevs/8212937/8212937.webrev.00.zip>
>>
>> By obtaining the ClassLoaderData instance through a call to
>> SystemDictionary::register_loader, we make sure that
>> either an existing
>> instance is obtained or a new one created. This same
>> idiom has already been
>> used in other places where there are no guarantees that a
>> previous
>> ClassLoaderData instance exists for a given class loader.
>> See futher
>> information in JDK-8212937 ticket [1].
>>
>> Thanks,
>> Martin.-
>>
>> --
>> [1] - https://bugs.openjdk.java.net/browse/JDK-8212937
>> <https://bugs.openjdk.java.net/browse/JDK-8212937>
>>
>> Hi Martin,
>>
>> I agree that the same idiom is used in other places, but
>> there are also a couple of occurrences of
>> java_lang_ClassLoader::parent in
>> classfile/classLoaderStats.cpp and
>> classfile/classLoaderHierarchyDCmd.cpp that do not. In order
>> to better understand, do you have a test case that
>> demonstrates this issue?
>>
>> Thanks,
>> Lois
>>
>>
>
>
More information about the hotspot-dev
mailing list