From ead6dacf40c57f49ab3d09c09f614efb699c7a03 Mon Sep 17 00:00:00 2001 From: Josh Gao Date: Fri, 12 Jun 2020 15:00:01 -0700 Subject: [PATCH] Fix file descriptor ownership. Previously, we attempt to pass ownership of the fd owned by a ParcelFileDescriptor to a FileInputStream, which explodes when we try to close it. Bug: http://b/156867945 Bug: http://b/159264419 Test: treehugger Change-Id: I9d5124658beb50f0a08499ed09e652037cb9ae66 (cherry picked from commit 3e29e4a39c9090e2815359a1fba0030f62ed8bbb) --- .../server/backup/restore/FullRestoreEngineThread.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/services/backup/java/com/android/server/backup/restore/FullRestoreEngineThread.java b/services/backup/java/com/android/server/backup/restore/FullRestoreEngineThread.java index 7075608674a1f..71f1dbf35008e 100644 --- a/services/backup/java/com/android/server/backup/restore/FullRestoreEngineThread.java +++ b/services/backup/java/com/android/server/backup/restore/FullRestoreEngineThread.java @@ -1,10 +1,10 @@ package com.android.server.backup.restore; import android.os.ParcelFileDescriptor; +import android.os.ParcelFileDescriptor.AutoCloseInputStream; import libcore.io.IoUtils; -import java.io.FileInputStream; import java.io.InputStream; class FullRestoreEngineThread implements Runnable { @@ -19,7 +19,7 @@ class FullRestoreEngineThread implements Runnable { // We *do* want this FileInputStream to own the underlying fd, so that // when we are finished with it, it closes this end of the pipe in a way // that signals its other end. - mEngineStream = new FileInputStream(engineSocket.getFileDescriptor(), true); + mEngineStream = new AutoCloseInputStream(engineSocket); // Tell it to be sure to leave the agent instance up after finishing mMustKillAgent = false; }