Process.exec with the linux posix_spawn mode has a bug
forax at univ-mlv.fr
forax at univ-mlv.fr
Sun May 12 08:20:28 UTC 2019
Hi David,
spot on !
jspawnhelper had no execution permission (i overlook that in my installation process).
I wonder if the exception message can be improved to indicate that the issue is on jspawnhelper and not on the program i want to execute.
Thanks a lot,
Rémi
----- Mail original -----
> De: "David Lloyd" <david.lloyd at redhat.com>
> À: "Remi Forax" <forax at univ-mlv.fr>
> Cc: "core-libs-dev" <core-libs-dev at openjdk.java.net>, "Roger Riggs" <Roger.Riggs at oracle.com>, "Alan Bateman"
> <Alan.Bateman at oracle.com>
> Envoyé: Samedi 11 Mai 2019 17:14:56
> Objet: Re: Process.exec with the linux posix_spawn mode has a bug
> On Sat, May 11, 2019 at 9:49 AM Remi Forax <forax at univ-mlv.fr> wrote:
>>
>> I've seen a weird error on my CI [1] since the 15th of February when using the
>> jdk 13,
>> i was not able to run jshell* using the programmatic API (java tool) anymore.
>>
>> Yesterday, i took the time to track that issue and i believe i've found the root
>> cause, trying to execute the java launcher using ProcessBuilder.start() with
>> the jdk 13 sometimes fails with an i/o exception (errno 13) which is weird
>> because you are trying to execute the same process that the one you are
>> executing. Note that this is a spurious bug, I was not able to find the exact
>> condition that triggers that bug.
>> So sometime it works, sometime it doesn't.
>
> Assuming you're running on Linux (given that the changeset only
> applies to Linux), errno 13 is EACCES which would indicate a
> filesystem permission issue. Are you sure you have permission to
> execute `jspawnhelper` in your JVM installation? Could there be an
> SELinux restriction in place?
>
> Here's what the man page says:
>
> ```
>
> [EACCES] Search permission is denied for a component of
> the path prefix.
>
>
> [EACCES] The new process file is not an ordinary file.
>
>
> [EACCES] The new process file mode denies execute permission.
>
>
> [EACCES] The new process file is on a filesystem
> mounted with execution
>
> disabled (MNT_NOEXEC in <sys/mount.h>).
> ```
>
>> If i pass -Djdk.lang.Process.launchMechanism=fork (or vfork) when starting the
>> VM, the bug disappear meaning that the bug occurs when the VM is trying to use
>> posix_spawn, perhaps spawn is trying to do an optimization when you try to
>> execute the same process as the one you are running under some conditions ?
>
> The posix_spawn approach executes an intermediate support process
> (`jspawnhelper`) which in turn executes the target process. I believe
> there's an extensive discussion on the reasons for this in the
> `core-libs-dev` archive.
>
>
> --
> - DML
More information about the core-libs-dev
mailing list