Send UID and VM identifier to existing atoms
Bug: 236252851
Test: N/A
Change-Id: I5e4db74f9a5cefd071676b9d248e9c5d91c5bfdd
diff --git a/virtualizationservice/src/aidl.rs b/virtualizationservice/src/aidl.rs
index 10162d2..5f4b7a7 100644
--- a/virtualizationservice/src/aidl.rs
+++ b/virtualizationservice/src/aidl.rs
@@ -452,6 +452,7 @@
// Actually start the VM.
let crosvm_config = CrosvmConfig {
cid,
+ name: config.name.clone(),
bootloader: maybe_clone_file(&config.bootloader)?,
kernel: maybe_clone_file(&config.kernel)?,
initrd: maybe_clone_file(&config.initrd)?,
@@ -623,6 +624,7 @@
vm_config.memoryMib = config.memoryMib;
}
+ vm_config.name = config.name.clone();
vm_config.protectedVm = config.protectedVm;
vm_config.numCpus = config.numCpus;
vm_config.cpuAffinity = config.cpuAffinity.clone();
@@ -1043,7 +1045,8 @@
})?;
let stream = vm.stream.lock().unwrap().take();
vm.callbacks.notify_payload_started(cid, stream);
- write_vm_booted_stats();
+
+ write_vm_booted_stats(vm.requester_uid as i32, &vm.name);
Ok(())
} else {
error!("notifyPayloadStarted is called from an unknown CID {}", cid);
diff --git a/virtualizationservice/src/atom.rs b/virtualizationservice/src/atom.rs
index 7f1d6b1..feaa72a 100644
--- a/virtualizationservice/src/atom.rs
+++ b/virtualizationservice/src/atom.rs
@@ -21,6 +21,7 @@
};
use android_system_virtualizationservice::binder::{Status, Strong};
use anyhow::{anyhow, Result};
+use binder::ThreadState;
use log::{trace, warn};
use microdroid_payload_config::VmPayloadConfig;
use statslog_virtualization_rust::{vm_booted, vm_creation_requested, vm_exited};
@@ -54,6 +55,7 @@
}
}
+ let vm_identifier;
let config_type;
let num_cpus;
let cpu_affinity;
@@ -61,6 +63,7 @@
let apexes;
match config {
VirtualMachineConfig::AppConfig(config) => {
+ vm_identifier = &config.name;
config_type = vm_creation_requested::ConfigType::VirtualMachineAppConfig;
num_cpus = config.numCpus;
cpu_affinity = config.cpuAffinity.clone().unwrap_or_default();
@@ -79,6 +82,7 @@
}
}
VirtualMachineConfig::RawConfig(config) => {
+ vm_identifier = &config.name;
config_type = vm_creation_requested::ConfigType::VirtualMachineRawConfig;
num_cpus = config.numCpus;
cpu_affinity = config.cpuAffinity.clone().unwrap_or_default();
@@ -87,11 +91,9 @@
}
}
- let empty_string = String::new();
let vm_creation_requested = vm_creation_requested::VmCreationRequested {
- // TODO(seungjaeyoo) Implement sending proper data about uid & vm_identifier
- uid: -1,
- vm_identifier: &empty_string,
+ uid: ThreadState::get_calling_uid() as i32,
+ vm_identifier,
hypervisor: vm_creation_requested::Hypervisor::Pkvm,
is_protected,
creation_succeeded,
@@ -114,13 +116,8 @@
}
/// Write the stats of VM boot to statsd
-pub fn write_vm_booted_stats() {
- let empty_string = String::new();
- let vm_booted = vm_booted::VmBooted {
- // TODO(seungjaeyoo) Implement sending proper data about uid & vm_identifier
- uid: -1,
- vm_identifier: &empty_string,
- };
+pub fn write_vm_booted_stats(uid: i32, vm_identifier: &String) {
+ let vm_booted = vm_booted::VmBooted { uid, vm_identifier };
match vm_booted.stats_write() {
Err(e) => {
warn!("statslog_rust failed with error: {}", e);
@@ -130,12 +127,10 @@
}
/// Write the stats of VM exit to statsd
-pub fn write_vm_exited_stats(reason: DeathReason) {
- let empty_string = String::new();
+pub fn write_vm_exited_stats(uid: i32, vm_identifier: &String, reason: DeathReason) {
let vm_exited = vm_exited::VmExited {
- // TODO(seungjaeyoo) Implement sending proper data about uid & vm_identifier
- uid: -1,
- vm_identifier: &empty_string,
+ uid,
+ vm_identifier,
death_reason: match reason {
DeathReason::INFRASTRUCTURE_ERROR => vm_exited::DeathReason::InfrastructureError,
DeathReason::KILLED => vm_exited::DeathReason::Killed,
diff --git a/virtualizationservice/src/crosvm.rs b/virtualizationservice/src/crosvm.rs
index b4d173c..aab7873 100644
--- a/virtualizationservice/src/crosvm.rs
+++ b/virtualizationservice/src/crosvm.rs
@@ -70,6 +70,7 @@
#[derive(Debug)]
pub struct CrosvmConfig {
pub cid: Cid,
+ pub name: String,
pub bootloader: Option<File>,
pub kernel: Option<File>,
pub initrd: Option<File>,
@@ -170,6 +171,8 @@
pub vm_state: Mutex<VmState>,
/// The CID assigned to the VM for vsock communication.
pub cid: Cid,
+ /// The name of the VM.
+ pub name: String,
/// Whether the VM is a protected VM.
pub protected: bool,
/// Directory of temporary files used by the VM while it is running.
@@ -204,10 +207,12 @@
) -> Result<VmInstance, Error> {
validate_config(&config)?;
let cid = config.cid;
+ let name = config.name.clone();
let protected = config.protected;
Ok(VmInstance {
vm_state: Mutex::new(VmState::NotStarted { config }),
cid,
+ name,
protected,
temporary_directory,
requester_uid,
@@ -264,7 +269,7 @@
let death_reason = death_reason(&result, &failure_reason);
self.callbacks.callback_on_died(self.cid, death_reason);
- write_vm_exited_stats(death_reason);
+ write_vm_exited_stats(self.requester_uid as i32, &self.name, death_reason);
// Delete temporary files.
if let Err(e) = remove_dir_all(&self.temporary_directory) {