Stop passing file size from pvm_exec
File size is no longer used by authfs, so remove the reference in
pvm_exec and compsvc.
Bug: 198824883
Test: atest ComposHostTestCases
Change-Id: Iabaae7c4e2a67780c6819b6d20b3cc410264ae29
diff --git a/compos/src/compilation.rs b/compos/src/compilation.rs
index 0199eb5..fec82a6 100644
--- a/compos/src/compilation.rs
+++ b/compos/src/compilation.rs
@@ -27,7 +27,7 @@
InputFdAnnotation::InputFdAnnotation, OutputFdAnnotation::OutputFdAnnotation,
};
use authfs_aidl_interface::binder::{ParcelFileDescriptor, Strong};
-use compos_aidl_interface::aidl::com::android::compos::Metadata::Metadata;
+use compos_aidl_interface::aidl::com::android::compos::FdAnnotation::FdAnnotation;
/// The number that represents the file descriptor number expecting by the task. The number may be
/// meaningless in the current process.
@@ -50,17 +50,17 @@
image: ParcelFileDescriptor,
}
-/// Runs the compiler with given flags with file descriptors described in `metadata` retrieved via
-/// `authfs_service`. Returns exit code of the compiler process.
+/// Runs the compiler with given flags with file descriptors described in `fd_annotation` retrieved
+/// via `authfs_service`. Returns exit code of the compiler process.
pub fn compile(
compiler_path: &Path,
compiler_args: &[String],
authfs_service: Strong<dyn IAuthFsService>,
- metadata: &Metadata,
+ fd_annotation: &FdAnnotation,
) -> Result<CompilerOutput> {
// Mount authfs (via authfs_service). The authfs instance unmounts once the `authfs` variable
// is out of scope.
- let authfs_config = build_authfs_config(metadata);
+ let authfs_config = build_authfs_config(fd_annotation);
let authfs = authfs_service.mount(&authfs_config)?;
// The task expects to receive FD numbers that match its flags (e.g. --zip-fd=42) prepared
@@ -135,18 +135,18 @@
})
}
-fn build_authfs_config(metadata: &Metadata) -> AuthFsConfig {
+fn build_authfs_config(fd_annotation: &FdAnnotation) -> AuthFsConfig {
AuthFsConfig {
port: 3264, // TODO: support dynamic port
- inputFdAnnotations: metadata
- .input_fd_annotations
+ inputFdAnnotations: fd_annotation
+ .input_fds
.iter()
- .map(|x| InputFdAnnotation { fd: x.fd, fileSize: x.file_size })
+ .map(|fd| InputFdAnnotation { fd: *fd })
.collect(),
- outputFdAnnotations: metadata
- .output_fd_annotations
+ outputFdAnnotations: fd_annotation
+ .output_fds
.iter()
- .map(|x| OutputFdAnnotation { fd: x.fd })
+ .map(|fd| OutputFdAnnotation { fd: *fd })
.collect(),
}
}
diff --git a/compos/src/compsvc.rs b/compos/src/compsvc.rs
index 4a19030..ed5534e 100644
--- a/compos/src/compsvc.rs
+++ b/compos/src/compsvc.rs
@@ -32,8 +32,8 @@
use compos_aidl_interface::aidl::com::android::compos::{
CompOsKeyData::CompOsKeyData,
CompilationResult::CompilationResult,
+ FdAnnotation::FdAnnotation,
ICompOsService::{BnCompOsService, ICompOsService},
- Metadata::Metadata,
};
use compos_aidl_interface::binder::{
BinderFeatures, ExceptionCode, Interface, Result as BinderResult, Status, Strong,
@@ -85,14 +85,19 @@
}
}
- fn compile(&self, args: &[String], metadata: &Metadata) -> BinderResult<CompilationResult> {
+ fn compile(
+ &self,
+ args: &[String],
+ fd_annotation: &FdAnnotation,
+ ) -> BinderResult<CompilationResult> {
let authfs_service = get_authfs_service()?;
- let output = compile(&self.dex2oat_path, args, authfs_service, metadata).map_err(|e| {
- new_binder_exception(
- ExceptionCode::SERVICE_SPECIFIC,
- format!("Compilation failed: {}", e),
- )
- })?;
+ let output =
+ compile(&self.dex2oat_path, args, authfs_service, fd_annotation).map_err(|e| {
+ new_binder_exception(
+ ExceptionCode::SERVICE_SPECIFIC,
+ format!("Compilation failed: {}", e),
+ )
+ })?;
match output {
CompilerOutput::Digests { oat, vdex, image } => {
let key = &*self.key_blob.read().unwrap();
diff --git a/compos/src/pvm_exec.rs b/compos/src/pvm_exec.rs
index 99eddfc..27802e3 100644
--- a/compos/src/pvm_exec.rs
+++ b/compos/src/pvm_exec.rs
@@ -32,14 +32,12 @@
use log::{debug, error, warn};
use minijail::Minijail;
use nix::fcntl::{fcntl, FcntlArg::F_GETFD};
-use nix::sys::stat::fstat;
use std::os::unix::io::RawFd;
use std::path::Path;
use std::process::exit;
use compos_aidl_interface::aidl::com::android::compos::{
- ICompOsService::ICompOsService, InputFdAnnotation::InputFdAnnotation, Metadata::Metadata,
- OutputFdAnnotation::OutputFdAnnotation,
+ FdAnnotation::FdAnnotation, ICompOsService::ICompOsService,
};
use compos_aidl_interface::binder::Strong;
@@ -65,7 +63,7 @@
}
}
-fn spawn_fd_server(metadata: &Metadata, debuggable: bool) -> Result<Minijail> {
+fn spawn_fd_server(fd_annotation: &FdAnnotation, debuggable: bool) -> Result<Minijail> {
let mut inheritable_fds = if debuggable {
vec![1, 2] // inherit/redirect stdout/stderr for debugging
} else {
@@ -73,15 +71,15 @@
};
let mut args = vec![FD_SERVER_BIN.to_string(), "--rpc-binder".to_string()];
- for metadata in &metadata.input_fd_annotations {
+ for fd in &fd_annotation.input_fds {
args.push("--ro-fds".to_string());
- args.push(metadata.fd.to_string());
- inheritable_fds.push(metadata.fd);
+ args.push(fd.to_string());
+ inheritable_fds.push(*fd);
}
- for metadata in &metadata.output_fd_annotations {
+ for fd in &fd_annotation.output_fds {
args.push("--rw-fds".to_string());
- args.push(metadata.fd.to_string());
- inheritable_fds.push(metadata.fd);
+ args.push(fd.to_string());
+ inheritable_fds.push(*fd);
}
let jail = Minijail::new()?;
@@ -104,7 +102,7 @@
struct Config {
args: Vec<String>,
- metadata: Metadata,
+ fd_annotation: FdAnnotation,
cid: Option<u32>,
debuggable: bool,
}
@@ -133,38 +131,20 @@
.multiple(true))
.get_matches();
- let results: Result<Vec<_>> = matches
- .values_of("in-fd")
- .unwrap_or_default()
- .map(|arg| {
- let fd = parse_arg_fd(arg)?;
- let file_size = fstat(fd)?.st_size;
- Ok(InputFdAnnotation { fd, file_size })
- })
- .collect();
- let input_fd_annotations = results?;
+ let results: Result<Vec<_>> =
+ matches.values_of("in-fd").unwrap_or_default().map(parse_arg_fd).collect();
+ let input_fds = results?;
- let results: Result<Vec<_>> = matches
- .values_of("out-fd")
- .unwrap_or_default()
- .map(|arg| {
- let fd = parse_arg_fd(arg)?;
- Ok(OutputFdAnnotation { fd })
- })
- .collect();
- let output_fd_annotations = results?;
+ let results: Result<Vec<_>> =
+ matches.values_of("out-fd").unwrap_or_default().map(parse_arg_fd).collect();
+ let output_fds = results?;
let args: Vec<_> = matches.values_of("args").unwrap().map(|s| s.to_string()).collect();
let cid =
if let Some(arg) = matches.value_of("cid") { Some(arg.parse::<u32>()?) } else { None };
let debuggable = matches.is_present("debug");
- Ok(Config {
- args,
- metadata: Metadata { input_fd_annotations, output_fd_annotations },
- cid,
- debuggable,
- })
+ Ok(Config { args, fd_annotation: FdAnnotation { input_fds, output_fds }, cid, debuggable })
}
fn main() -> Result<()> {
@@ -175,10 +155,10 @@
);
// 1. Parse the command line arguments for collect execution data.
- let Config { args, metadata, cid, debuggable } = parse_args()?;
+ let Config { args, fd_annotation, cid, debuggable } = parse_args()?;
// 2. Spawn and configure a fd_server to serve remote read/write requests.
- let fd_server_jail = spawn_fd_server(&metadata, debuggable)?;
+ let fd_server_jail = spawn_fd_server(&fd_annotation, debuggable)?;
let fd_server_lifetime = scopeguard::guard(fd_server_jail, |fd_server_jail| {
if let Err(e) = fd_server_jail.kill() {
if !matches!(e, minijail::Error::Killed(_)) {
@@ -189,7 +169,7 @@
// 3. Send the command line args to the remote to execute.
let service = if let Some(cid) = cid { get_rpc_binder(cid) } else { get_local_service() }?;
- let result = service.compile(&args, &metadata).context("Binder call failed")?;
+ let result = service.compile(&args, &fd_annotation).context("Binder call failed")?;
// TODO: store/use the signature
debug!(