Use ParcelFileDescriptor over FileDescriptor
The java.io.FileDescriptor object has a poor definition of ownership,
which can result in obscure use-after-close bugs. Instead, APIs should
return or accept ParcelFileDescriptor instances.
Bug: 130209137
Test: manual
Change-Id: Iad17731f34109493fc62d0ba0941998ce3ecb98c
diff --git a/binder_service_android.cc b/binder_service_android.cc
index 1799438..88bc1f2 100644
--- a/binder_service_android.cc
+++ b/binder_service_android.cc
@@ -16,16 +16,15 @@
#include "update_engine/binder_service_android.h"
-#include <android-base/unique_fd.h>
#include <base/bind.h>
#include <base/logging.h>
#include <binderwrapper/binder_wrapper.h>
#include <brillo/errors/error.h>
#include <utils/String8.h>
-using android::base::unique_fd;
using android::binder::Status;
using android::os::IUpdateEngineCallback;
+using android::os::ParcelFileDescriptor;
using std::string;
using std::vector;
using update_engine::UpdateEngineStatus;
@@ -115,7 +114,7 @@
}
Status BinderUpdateEngineAndroidService::applyPayloadFd(
- const ::android::base::unique_fd& fd,
+ const ParcelFileDescriptor& pfd,
int64_t payload_offset,
int64_t payload_size,
const vector<android::String16>& header_kv_pairs) {
@@ -127,7 +126,7 @@
brillo::ErrorPtr error;
if (!service_delegate_->ApplyPayload(
- fd.get(), payload_offset, payload_size, str_headers, &error)) {
+ pfd.get(), payload_offset, payload_size, str_headers, &error)) {
return ErrorPtrToStatus(error);
}
return Status::ok();