Allocate each VM an instance_id
Introduce a 64 bytes' long instance_id. When the VM is created, this is
requested from virtualization service, which randomly allocates it.
While it does that, it also logs the user & the package name.
The app persists this allocated instance_id in a file `instance_id` in
its directory for the vm instance (along with instance.img &
storage.img). When the VirtualMachine is run, this is an input into the
VM via DT.
This patch modifies Compos & vm binary to work with the instance_id.
flagging: instance_id allocation request is conditional to flag build
time flag llpvm_changes, no file `instance_id` is created if the flag is
off. `instanceId` is all 0s if the flag is off.
Bug: 291213394
Test: atest MicrodroidHostTest
Test: atest MicrodroidTests
Test: atest ComposHostTestCases
Test: Look for instance_id logged by VS
Change-Id: Ie8e25b9510e27362d4580c55c1bd557143ff7d0e
diff --git a/virtualizationmanager/src/aidl.rs b/virtualizationmanager/src/aidl.rs
index 6ba5cf4..7a1ce37 100644
--- a/virtualizationmanager/src/aidl.rs
+++ b/virtualizationmanager/src/aidl.rs
@@ -229,6 +229,11 @@
ret
}
+ /// Allocate a new instance_id to the VM
+ fn allocateInstanceId(&self) -> binder::Result<[u8; 64]> {
+ GLOBAL_SERVICE.allocateInstanceId()
+ }
+
/// Initialise an empty partition image of the given size to be used as a writable partition.
fn initializeWritablePartition(
&self,
@@ -398,9 +403,9 @@
vec![]
};
+ let instance_id;
let untrusted_props = if cfg!(llpvm_changes) {
- // TODO(b/291213394): Replace this with a per-VM instance Id.
- let instance_id = b"sixtyfourbyteslonghardcoded_indeed_sixtyfourbyteslonghardcoded_h";
+ instance_id = extract_instance_id(config);
vec![(cstr!("instance-id"), &instance_id[..])]
} else {
vec![]
@@ -1268,6 +1273,13 @@
}
}
+fn extract_instance_id(config: &VirtualMachineConfig) -> [u8; 64] {
+ match config {
+ VirtualMachineConfig::RawConfig(config) => config.instanceId,
+ VirtualMachineConfig::AppConfig(config) => config.instanceId,
+ }
+}
+
fn extract_gdb_port(config: &VirtualMachineConfig) -> Option<NonZeroU16> {
match config {
VirtualMachineConfig::RawConfig(config) => NonZeroU16::new(config.gdbPort as u16),