Use safe wrapper from binder_common rather than bindgen directly.
Test: mm
Change-Id: I9eaabe4454fdda8f6154148afb117cf27a036c7c
diff --git a/authfs/Android.bp b/authfs/Android.bp
index 40643b8..cb7f119 100644
--- a/authfs/Android.bp
+++ b/authfs/Android.bp
@@ -14,7 +14,7 @@
"libandroid_logger",
"libanyhow",
"libauthfs_fsverity_metadata",
- "libbinder_rpc_unstable_bindgen",
+ "libbinder_common",
"libbinder_rs",
"libcfg_if",
"libfsverity_digests_proto_rust",
diff --git a/authfs/fd_server/Android.bp b/authfs/fd_server/Android.bp
index c4aa1d8..77bed8b 100644
--- a/authfs/fd_server/Android.bp
+++ b/authfs/fd_server/Android.bp
@@ -11,7 +11,6 @@
"libanyhow",
"libauthfs_fsverity_metadata",
"libbinder_common",
- "libbinder_rpc_unstable_bindgen",
"libbinder_rs",
"libclap_deprecated",
"liblibc",
diff --git a/authfs/src/file.rs b/authfs/src/file.rs
index 44e60d8..d9f8964 100644
--- a/authfs/src/file.rs
+++ b/authfs/src/file.rs
@@ -6,15 +6,14 @@
pub use dir::{InMemoryDir, RemoteDirEditor};
pub use remote_file::{RemoteFileEditor, RemoteFileReader, RemoteMerkleTreeReader};
-use binder::unstable_api::{new_spibinder, AIBinder};
-use binder::FromIBinder;
-use std::convert::TryFrom;
-use std::io;
-use std::path::{Path, MAIN_SEPARATOR};
-
use crate::common::{divide_roundup, CHUNK_SIZE};
use authfs_aidl_interface::aidl::com::android::virt::fs::IVirtFdService::IVirtFdService;
use authfs_aidl_interface::binder::{Status, Strong};
+use binder::StatusCode;
+use binder_common::rpc_client::connect_rpc_binder;
+use std::convert::TryFrom;
+use std::io;
+use std::path::{Path, MAIN_SEPARATOR};
pub type VirtFdService = Strong<dyn IVirtFdService>;
pub type VirtFdServiceStatus = Status;
@@ -24,21 +23,15 @@
pub const RPC_SERVICE_PORT: u32 = 3264;
pub fn get_rpc_binder_service(cid: u32) -> io::Result<VirtFdService> {
- // SAFETY: AIBinder returned by RpcClient has correct reference count, and the ownership can be
- // safely taken by new_spibinder.
- let ibinder = unsafe {
- new_spibinder(binder_rpc_unstable_bindgen::RpcClient(cid, RPC_SERVICE_PORT) as *mut AIBinder)
- };
- if let Some(ibinder) = ibinder {
- Ok(<dyn IVirtFdService>::try_from(ibinder).map_err(|e| {
- io::Error::new(
- io::ErrorKind::AddrNotAvailable,
- format!("Cannot connect to RPC service: {}", e),
- )
- })?)
- } else {
- Err(io::Error::new(io::ErrorKind::InvalidInput, "Invalid raw AIBinder"))
- }
+ connect_rpc_binder(cid, RPC_SERVICE_PORT).map_err(|e| match e {
+ StatusCode::BAD_VALUE => {
+ io::Error::new(io::ErrorKind::InvalidInput, "Invalid raw AIBinder")
+ }
+ _ => io::Error::new(
+ io::ErrorKind::AddrNotAvailable,
+ format!("Cannot connect to RPC service: {}", e),
+ ),
+ })
}
/// A trait for reading data by chunks. Chunks can be read by specifying the chunk index. Only the