Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8523c81f authored by Chris Wailes's avatar Chris Wailes
Browse files

Fix FD leak in the Zygote.

Issues with LocalSocketImpl.close meant that a FD that was supposed to
be closed wasn't.  This CL switches to using Os.close to ensure that the
FD is closed properly.

Bug: 130309968
Bug: 130235718
Test: atest android.security.cts.FileDescriptorTest#testCLOEXEC
Test: Tested for file existance after Os.close call
Change-Id: I80fb3b378f651e71bc1ae9aab8636935a2ff6356
parent fb9a7746
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -566,7 +566,19 @@ public final class Zygote {
            System.exit(-1);
        } finally {
            IoUtils.closeQuietly(sessionSocket);
            IoUtils.closeQuietly(usapPoolSocket);

            try {
                // This socket is closed using Os.close due to an issue with the implementation of
                // LocalSocketImp.close.  Because the raw FD is created by init and then loaded from
                // an environment variable (as opposed to being created by the LocalSocketImpl
                // itself) the current implementation will not actually close the underlying FD.
                //
                // See b/130309968 for discussion of this issue.
                Os.close(usapPoolSocket.getFileDescriptor());
            } catch (ErrnoException ex) {
                Log.e("USAP", "Failed to close USAP pool socket");
                throw new RuntimeException(ex);
            }
        }

        try {