harmony-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Gregory Shimansky <gshiman...@gmail.com>
Subject Re: [testing] today’s failures of classlib tests on Linux to investigate
Date Wed, 07 Mar 2007 20:35:12 GMT
Geir Magnusson Jr. wrote:
> Nice work

This work actually shows that the IMHO correct change by Paulex to an 
innocent function findError may affect other places where errno may not 
be set. This function used to always return an error code in "default" 
case because it didn't have case for 0. Now it shall return 
HYPORT_SUCCESS in such cases, and more than one place that I've found 
today may be affected where error is returned by system API, but errno 
is not set to any kind of specific error.

> On Mar 7, 2007, at 8:19 AM, Gregory Shimansky wrote:
> 
>> Vladimir Ivanov wrote:
>>> Hello everybody,
>>> in case if someone miss the CC notification: now the classlib tests
>>> crashed/ hang up on the Linux boxes when run over DRLVM.
>>> Notifications were send ~12hours ago.
>>> Failed tests:
>>> Linux x86_64 (hang up):
>>> TEST-org.apache.harmony.archive.tests.java.util.jar.JarExecTest.xml
>>> Linux x86 (trying to reproduce):
>>> TEST-org.apache.harmony.archive.tests.java.util.jar.JarFileTest.xml
>>> TEST-org.apache.harmony.security.tests.PolicyEntryTest.xml
>>> TEST-org.apache.harmony.security.tests.java.security.cert.CertificateFactory4Test.xml

>>>
>>
>> I've found the reason of crash of 
>> org.apache.harmony.archive.tests.java.util.jar.JarExecTest. The reason 
>> for it is actually commit in revision 514596. Most likely other tests 
>> fail for the same reason. The sequence that leads to a crash looks 
>> like this:
>>
>> 1. Java calls Java_java_net_InetAddress_getHostByNameImpl with a host 
>> name "jcltest.apache.org".
>> 2. It calls hysock_getaddrinfo with this name and uninitialized 
>> hyaddrinfo_struct addrinfo variable.
>> 3. Function hysock_getaddrinfo calls system function getaddrinfo and 
>> it returns not null which means error.
>> 4. In this case hysock_getaddrinfo reads errno and records it in 
>> errorCode. But errorCode appears to be 0. Looking at man page for 
>> getaddrinfo I see that only in case of EAI_SYSTEM it sets errno to 
>> some specific value. In other cases errno state is not specified.
>> 5. Function hysock_getaddrinfo records an error with errorCode 0 using 
>> findError. Since after the change in 514596 the errorCode 0 means 
>> HYPORT_SUCCESS, then it is considered to be no error. Previously 
>> before that change findError would return HYPORT_ERROR_SOCKET_OPFAILED.
>> 6. Since hysock_getaddrinfo returned HYPORT_SUCCESS which is 0, the 
>> function Java_java_net_InetAddress_getHostByNameImpl continues to work 
>> with uninitialized addrinfo variable.
>> 7. When Java_java_net_InetAddress_getHostByNameImpl calls to 
>> hysock_freeaddrinfo, free is called on unintialized pointer which 
>> leads to a crash.

-- 
Gregory


Mime
View raw message