On Thu, Jul 11, 2019 at 11:01 PM Rainer Jung <rainer.j...@kippdata.de>
wrote:

> Am 11.07.2019 um 22:10 schrieb Rémy Maucherat:
> > On Thu, Jul 11, 2019 at 8:42 PM Rainer Jung <rainer.j...@kippdata.de
> > <mailto:rainer.j...@kippdata.de>> wrote:
> >
> >     Hi Rémy,
> >
> >     When one looks up the macros in native/include/tcn.h, this boils
> >     down to
> >     the following returning null:
> >
> >     (*env)->FindClass(env, "org/apache/tomcat/jni/FileInfo")
> >
> >     So our own FileInfo class can not be found. FindClass docs indicate
> its
> >     searched in the CLASSPATH although I'm not sure whether its really
> the
> >     classpath or some search paths of a class loader hierarchy.
> >
> >     You might want to add the JVM commandline flag "-verbose:class" for
> any
> >     easy way to track class loading.
> >
> >     I didn't really grok what you meant with "define in JNI
> configuration".
> >     For normal JVMs the code just works, so what might be special for
> Graal
> >     that org.apache.tomcat.jni.FileInfo can't be found?
> >
> >
> > A Graal native image is indeed not a normal JVM and does not support any
> > kind of dynamic class loading, it has to be declared first in these
> > configuration files.
>
> Ah OK.
>
> > So I am adding this to the jni one:
> > { "name":"org.apache.tomcat.jni.FileInfo" },
> > { "name":"org.apache.tomcat.jni.Sockaddr" },
> > { "name":"org.apache.tomcat.jni.FileInfo" },
>
> Again FileInfo? I think instead "org.apache.tomcat.jni.Error" should be
> the third one.
>
> > { "name":"java.lang.String", "methods" :
> >
> [{"name":"<init>","parameterTypes":["byte[]"]},{"name":"getBytes","parameterTypes":[]}]
>
> > }
> > And loading now works.
> > Jul 11, 2019 9:39:28 PM org.apache.catalina.core.AprLifecycleListener
> > lifecycleEvent
> > INFO: Loaded APR based Apache Tomcat Native library [1.2.23] using APR
> > version [1.6.5].
> > Jul 11, 2019 9:39:28 PM org.apache.catalina.core.AprLifecycleListener
> > lifecycleEvent
> > INFO: APR capabilities: IPv6 [true], sendfile [true], accept filters
> > [false], random [true].
> > Jul 11, 2019 9:39:28 PM org.apache.catalina.core.AprLifecycleListener
> > lifecycleEvent
> > INFO: APR/OpenSSL configuration: useAprConnector [false], useOpenSSL
> [true]
> > Jul 11, 2019 9:39:28 PM org.apache.catalina.core.AprLifecycleListener
> > initializeSSL
> > INFO: OpenSSL successfully initialized [OpenSSL 1.1.1c FIPS  28 May 2019]
> >
> > However when trying to actually connect I got:
> > Segmentation fault (core dumped)
> >
> > Oops.
>
> If the above duplicate class was just a copy and paste typo, but you had
> it right in your actual work, the next one could try, would be
> activating writing core dumps in the underlying OS. The resulting core
> should be inspectable depending on OS via gdb or similar tools. The
> simplest gdb invocation would be
>
> gdb /path/to/my/bin/java /path/to/my/corefile
>
> and then at the gdb prompt the command
>
>    bt
>
> or
>
>    bt full
>
> or
>
>    thread apply all bt
>
> or
>
>    thread apply all bt full
>
> That way we should at least see, in which function the crash happens.
> Depending on symbols etc. you might even get line numbers.
>

In the native code, it crashes on:
https://github.com/apache/tomcat-native/blob/master/native/src/ssl.c#L635

I modified the code to:
    double d = (((double)(rand()%RAND_MAX)/RAND_MAX)*(h-l));
    apr_snprintf(buf, sizeof(buf), "%.0f", d);

And it cores on the apr_snprintf. I don't see how it is unsafe though.

Rémy

Reply via email to