Add support for encrypted storage expansion
Capability to configure the encrypted storage size
Partition resizing to the required size upon boot
New unit tests to validate this functionality
Bug: 381067202
Test: atest MicrodroidTests
Change-Id: I6f5737ee601e7c511bdd316b180bf50e3d102ab1
diff --git a/android/virtmgr/src/aidl.rs b/android/virtmgr/src/aidl.rs
index 6aecc75..e954d21 100644
--- a/android/virtmgr/src/aidl.rs
+++ b/android/virtmgr/src/aidl.rs
@@ -303,6 +303,34 @@
Ok(())
}
+ fn setEncryptedStorageSize(
+ &self,
+ image_fd: &ParcelFileDescriptor,
+ size: i64,
+ ) -> binder::Result<()> {
+ check_manage_access()?;
+
+ let size = size
+ .try_into()
+ .with_context(|| format!("Invalid size: {}", size))
+ .or_binder_exception(ExceptionCode::ILLEGAL_ARGUMENT)?;
+ let size = round_up(size, PARTITION_GRANULARITY_BYTES);
+
+ let image = clone_file(image_fd)?;
+ let image_size = image.metadata().unwrap().len();
+
+ if image_size > size {
+ return Err(Status::new_exception_str(
+ ExceptionCode::ILLEGAL_ARGUMENT,
+ Some("Can't shrink encrypted storage"),
+ ));
+ }
+ // Reset the file length. In most filesystems, this will not allocate any physical disk
+ // space, it will only change the logical size.
+ image.set_len(size).context("Failed to extend file").or_service_specific_exception(-1)?;
+ Ok(())
+ }
+
/// Creates or update the idsig file by digesting the input APK file.
fn createOrUpdateIdsigFile(
&self,