Do not use size filler

instead always fill zeros when there's gap between composite disk
components.

Bug: 192991318
Test: MicrodroidHostTestCases
Change-Id: I89234e047b6d5a48fee773dac0e7971ab465242c
diff --git a/virtualizationservice/src/payload.rs b/virtualizationservice/src/payload.rs
index 1df537c..9c6deae 100644
--- a/virtualizationservice/src/payload.rs
+++ b/virtualizationservice/src/payload.rs
@@ -14,17 +14,13 @@
 
 //! Payload disk image
 
-use crate::composite::align_to_partition_size;
-
 use anyhow::{anyhow, Context, Result};
 use microdroid_metadata::{ApexPayload, ApkPayload, Metadata};
 use microdroid_payload_config::ApexConfig;
 use once_cell::sync::OnceCell;
 use serde::Deserialize;
 use serde_xml_rs::from_reader;
-use std::fs;
 use std::fs::{File, OpenOptions};
-use std::io::{Seek, SeekFrom, Write};
 use std::path::{Path, PathBuf};
 use vmconfig::{DiskImage, Partition};
 
@@ -69,46 +65,12 @@
     }
 }
 
-/// When passing a host APEX file as a block device in a payload disk image,
-/// the size of the original file needs to be stored in the last 4 bytes so that
-/// other programs (e.g. apexd) can read it as a zip.
-/// Returns true always since the filler is created.
-fn make_size_filler(size: u64, filler_path: &Path) -> Result<bool> {
-    let partition_size = align_to_partition_size(size + 4);
-    let mut file = OpenOptions::new().create_new(true).write(true).open(filler_path)?;
-    file.set_len(partition_size - size)?;
-    file.seek(SeekFrom::End(-4))?;
-    file.write_all(&(size as i32).to_be_bytes())?;
-    Ok(true)
-}
-
-/// When passing a host APK file as a block device in a payload disk image and it is
-/// mounted via dm-verity, we need to make the device zero-padded up to 4K boundary.
-/// Otherwise, integrity checks via hashtree will fail.
-/// Returns true if filler is created.
-fn make_zero_filler(size: u64, filler_path: &Path) -> Result<bool> {
-    let partition_size = align_to_partition_size(size);
-    if partition_size <= size {
-        return Ok(false);
-    }
-    let file = OpenOptions::new().create_new(true).write(true).open(filler_path)?;
-    file.set_len(partition_size - size)?;
-    Ok(true)
-}
-
-/// When passing a host idsig file as a block device, we don't need any filler because it is read
-/// in length-prefixed way.
-/// Returns false always because the filler is not created.
-fn make_no_filler(_size: u64, _filler_path: &Path) -> Result<bool> {
-    Ok(false)
-}
-
 /// Creates a DiskImage with partitions:
 ///   metadata: metadata
-///   microdroid-apex-0: [apex 0, size filler]
-///   microdroid-apex-1: [apex 1, size filler]
+///   microdroid-apex-0: apex 0
+///   microdroid-apex-1: apex 1
 ///   ..
-///   microdroid-apk: [apk, zero filler]
+///   microdroid-apk: apk
 ///   microdroid-apk-idsig: idsig
 pub fn make_payload_disk(
     apk_file: PathBuf,
@@ -146,48 +108,23 @@
     }];
 
     let apex_info_list = ApexInfoList::load()?;
-    let mut filler_count = 0;
     for (i, apex) in apexes.iter().enumerate() {
-        partitions.push(make_partition(
-            format!("microdroid-apex-{}", i),
-            apex_info_list.get_path_for(&apex.name)?,
-            temporary_directory,
-            &mut filler_count,
-            &make_size_filler,
-        )?);
+        partitions.push(Partition {
+            label: format!("microdroid-apex-{}", i),
+            paths: vec![apex_info_list.get_path_for(&apex.name)?],
+            writable: false,
+        });
     }
-    partitions.push(make_partition(
-        "microdroid-apk".to_owned(),
-        apk_file,
-        temporary_directory,
-        &mut filler_count,
-        &make_zero_filler,
-    )?);
-    partitions.push(make_partition(
-        "microdroid-apk-idsig".to_owned(),
-        idsig_file,
-        temporary_directory,
-        &mut filler_count,
-        &make_no_filler,
-    )?);
+    partitions.push(Partition {
+        label: "microdroid-apk".to_owned(),
+        paths: vec![apk_file],
+        writable: false,
+    });
+    partitions.push(Partition {
+        label: "microdroid-apk-idsig".to_owned(),
+        paths: vec![idsig_file],
+        writable: false,
+    });
 
     Ok(DiskImage { image: None, partitions, writable: false })
 }
-
-fn make_partition(
-    label: String,
-    path: PathBuf,
-    temporary_directory: &Path,
-    filler_count: &mut u32,
-    make_filler: &dyn Fn(u64, &Path) -> Result<bool>,
-) -> Result<Partition> {
-    let filler_path = temporary_directory.join(format!("filler-{}", filler_count));
-    let size = fs::metadata(&path)?.len();
-
-    if make_filler(size, &filler_path)? {
-        *filler_count += 1;
-        Ok(Partition { label, paths: vec![path, filler_path], writable: false })
-    } else {
-        Ok(Partition { label, paths: vec![path], writable: false })
-    }
-}