While working on JDK-8223777, I spotted (childstuff.c) the following problem:
In error handling code (WhyCantJonnyExec) child signals error to parent by writing an error code to the fail pipe. It does that using the hard wired fail pipe write-end fd (FAIL_FILENO, usually 4). But that only works as intended after the fail pipe write end has been successfully dup2'ed to FAIL_FILENO.
If an error happens before that, error code will still be written to FAIL_FILENO, which may be an invalid file handle - which is almost benign - or refer to an unrelated file descriptor the child inherited and did not close yet - which is not good.