Add a way to add a vendor disk image when launching Microdroid VM

This is a first patch in a series that adds support for "pluggable"
vendor images in Microdroid VMs.

In this patch virtmanager passes the vendor disk image to crosvm
invocation to make it available to guest Micrdroid.

Only callers with USE_CUSTOM_VIRTUAL_MACHINE permission can configure
the vendor image used in Microdroid.

Bug: 285855433
Test: presubmit
Test: vm run-microdroid --vendor /data/local/tmp/test_microdroid_vendor_image.img
Change-Id: I376468d6ef7dd675856f40b1361ca5d8a96cefb5
diff --git a/virtualizationmanager/src/aidl.rs b/virtualizationmanager/src/aidl.rs
index dd74d55..446641a 100644
--- a/virtualizationmanager/src/aidl.rs
+++ b/virtualizationmanager/src/aidl.rs
@@ -20,7 +20,7 @@
 use crate::composite::make_composite_image;
 use crate::crosvm::{CrosvmConfig, DiskFile, PayloadState, VmContext, VmInstance, VmState};
 use crate::debug_config::DebugConfig;
-use crate::payload::{add_microdroid_payload_images, add_microdroid_system_images};
+use crate::payload::{add_microdroid_payload_images, add_microdroid_system_images, add_microdroid_vendor_image};
 use crate::selinux::{getfilecon, SeContext};
 use android_os_permissions_aidl::aidl::android::os::IPermissionController;
 use android_system_virtualizationcommon::aidl::android::system::virtualizationcommon::{
@@ -620,6 +620,10 @@
         }
         vm_config.taskProfiles = custom_config.taskProfiles.clone();
         vm_config.gdbPort = custom_config.gdbPort;
+
+        if let Some(file) = custom_config.vendorImage.as_ref() {
+            add_microdroid_vendor_image(clone_file(file)?, &mut vm_config)
+        }
     }
 
     if config.memoryMib > 0 {