diff options
| author | 2024-06-14 09:48:06 +0000 | |
|---|---|---|
| committer | 2024-06-14 10:26:38 +0000 | |
| commit | b27d29b32e64dff2b2ac6c95a128f7d0d53fe6bf (patch) | |
| tree | b033797b3891636dfdb05b8b5db59024305c8fae | |
| parent | 5cc2247e292e20d4a6758d953182d2a978fa000b (diff) | |
Try closing PFDs sent in map after binder call
- Iterate through all PFDs sent by caller after the binder call to send
to system-server is complete. This prevents any potential leakages if
the client does not close the FDs themselves.
Bug: 347173075
Test: cts
Change-Id: I06652b561d3548f7d5ec976b7a787e9c6c3d0b74
| -rw-r--r-- | core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java b/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java index 293015f86cee..d82fe1ca885c 100644 --- a/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java +++ b/core/java/android/service/ondeviceintelligence/OnDeviceIntelligenceService.java @@ -59,6 +59,7 @@ import com.android.internal.infra.AndroidFuture; import java.io.File; import java.io.FileNotFoundException; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.Objects; @@ -224,6 +225,7 @@ public abstract class OnDeviceIntelligenceService extends Service { Bundle bundle = new Bundle(); parcelFileDescriptorMap.forEach(bundle::putParcelable); remoteCallback.sendResult(bundle); + tryClosePfds(parcelFileDescriptorMap.values()); })); } @@ -444,6 +446,16 @@ public abstract class OnDeviceIntelligenceService extends Service { }; } + private static void tryClosePfds(Collection<ParcelFileDescriptor> pfds) { + pfds.forEach(pfd -> { + try { + pfd.close(); + } catch (Exception e) { + Log.w(TAG, "Error closing FD", e); + } + }); + } + private void onGetReadOnlyFileDescriptor(@NonNull String fileName, @NonNull AndroidFuture<ParcelFileDescriptor> future) { Slog.v(TAG, "onGetReadOnlyFileDescriptor " + fileName); |