Hi Matthias,

the fix makes sense, this is very clearly a bug.

I'd suggest a simpler fix though:

                      end -= 4; // make sure there are 4 bytes to read at
start
-                     while (start < end) {
+                    while (start <= end) {

Note that the code has a diffent bug too, very unlikely but not impossible
to hit:

 321         ssize_t count = read(fd, buf, CHUNK_SIZE);
 322         if (count >= MIN_SIZE) {

We attempt to read CHUNK_SIZE bytes and require the read to have returned
at least MIN_SIZE (something like 30ish bytes). If not, jexec fails.

read may have been interrupted (EINTR) or may have returned less bytes than
MIN_SIZE, so it should read in a loop til eof or CHUNK_SIZE bytes are read.

Kind Regards, Thomas


On Wed, Mar 1, 2017 at 10:23 AM, Baesken, Matthias <matthias.baes...@sap.com
> wrote:

> Ping ...
>
> Can I get a review please for the change ?
>
>
> Thanks, Matthias
>
> From: Baesken, Matthias
> Sent: Donnerstag, 23. Februar 2017 12:28
> To: 'core-libs-dev@openjdk.java.net' <core-libs-dev@openjdk.java.net>
> Cc: Langer, Christoph <christoph.lan...@sap.com>; Erik Joelsson (
> erik.joels...@oracle.com) <erik.joels...@oracle.com>; 'Michel Trudeau' <
> michel.trud...@oracle.com>
> Subject: RE: RFR [XS] : 8175000 : jexec fails to execute simple
> helloworld.jar
>
> Here is  the webrev for jdk9 :
>
> http://cr.openjdk.java.net/~mbaesken/webrevs/8175000/
>
>
> ?  And btw I really wonder  - is  jexec still needed in future jdk's like
> jdk10  ? Seems it is not used much .
>
> ?
>
> In case  jexec will stay in  the jdk  I might add a test for the tool as
> well, if there is interest  ( could not really find one that tests
> execution of a simple jar-file with jexec).
>
> Best regards, Matthias
>
>
> From: Baesken, Matthias
> Sent: Donnerstag, 23. Februar 2017 07:39
> To: 'core-libs-dev@openjdk.java.net' <core-libs-dev@openjdk.java.net
> <mailto:core-libs-dev@openjdk.java.net>>
> Cc: Langer, Christoph <christoph.lan...@sap.com<mailto:
> christoph.lan...@sap.com>>; Erik Joelsson (erik.joels...@oracle.com<
> mailto:erik.joels...@oracle.com>) <erik.joels...@oracle.com<mailto:
> erik.joels...@oracle.com>>
> Subject: RE: RFR [XS] : 8175000 : jexec fails to execute simple
> helloworld.jar
>
> Hello,  probably I should add the info that the fix is needed  in jdk9 as
> well , not only jdk10 .
>
> Without the fix jdk9/10    show this error  when executing a small
> example jar :
>
> /myjdk9/images/jdk/lib/jexec      /java_test/hellojar/helloworld.jar
> invalid file (bad magic number): Exec format error
>
> with the fix :
>
> jdk/lib/jexec    /java_test/hellojar/helloworld.jar
> Hello world from a jar file
>
>
> And btw I really wonder  - is  jexec still needed in future jdk's like
> jdk10  ? Seems it is not used much .
>
> Best regards, Matthias
>
>
> From: Baesken, Matthias
> Sent: Mittwoch, 22. Februar 2017 18:16
> To: core-libs-dev@openjdk.java.net<mailto:core-libs-dev@openjdk.java.net>
> Cc: Langer, Christoph <christoph.lan...@sap.com<mailto:
> christoph.lan...@sap.com>>; Erik Joelsson (erik.joels...@oracle.com<
> mailto:erik.joels...@oracle.com>) <erik.joels...@oracle.com<mailto:
> erik.joels...@oracle.com>>
> Subject: RFR [XS] : 8175000 : jexec fails to execute simple helloworld.jar
>
> Hello , when looking into  the jexec build I noticed   that  execution of
> a simple helloworld.jar   with jexec does not work any more.
>
> I did a little patch for this which adjusted the addition done with  CR
> 8156478: 3 Buffer overrun defect groups in jexec.c<https://javapartner.
> oracle.com/mproxy/repository/technology/java2/jdk9/jdk/rev/4f96129b45ee>
> .
>
> Could I have a review ( just a diff this time is provided because of
> infrastructure issues) for it ?
>
>
> Thanks, Matthias
>
> Bug :
> https://bugs.openjdk.java.net/browse/JDK-8175000
>
>
> Diff for jdk10  :
>
> # HG changeset patch
> # User mbaesken
> # Date 1487782485 -3600
> #      Wed Feb 22 17:54:45 2017 +0100
> # Node ID 93d55a711f3b1c3f282e6889c24d13f16d4a4548
> # Parent  884872263accabd4ab68d005abd4e5393144aa4f
> 8175000: jexec fails to execute simple helloworld.jar
>
> diff --git a/src/java.base/unix/native/launcher/jexec.c
> b/src/java.base/unix/native/launcher/jexec.c
> --- a/src/java.base/unix/native/launcher/jexec.c
> +++ b/src/java.base/unix/native/launcher/jexec.c
> @@ -331,8 +331,9 @@
>                  off_t end   = start  + xlen;
>
>                  if (end <= count) {
> -                    end -= 4; // make sure there are 4 bytes to read at
> start
> -                    while (start < end) {
> +                    // make sure there are 4 bytes to read at start
> +                    end -= 3;
> +                    while ((start < end) && (start < count-3)) {
>                          off_t xhid  = SH(buf, start);
>                          off_t xdlen = SH(buf, start + 2);
>
>

Reply via email to