pvmfw: update libavb error handling

Minor modifications to error handling to match new libavb_rs code; the
Verification error can now contain verification data, but we don't use
this feature so we can just drop this data to keep lifetime handling
simple.

Bug: b/290110273
Test: atest
Change-Id: Iffedf0efc9da8598352de4e0b60bd606d15b4336
diff --git a/pvmfw/avb/src/error.rs b/pvmfw/avb/src/error.rs
index af38c54..0f052e8 100644
--- a/pvmfw/avb/src/error.rs
+++ b/pvmfw/avb/src/error.rs
@@ -19,21 +19,20 @@
 
 /// Wrapper around `avb::SlotVerifyError` to add custom pvmfw errors.
 /// It is the error thrown by the payload verification API `verify_payload()`.
-#[derive(Clone, Debug, PartialEq, Eq)]
+#[derive(Debug, PartialEq, Eq)]
 pub enum PvmfwVerifyError {
-    /// Passthrough avb::SlotVerifyError.
-    AvbError(avb::SlotVerifyError),
+    /// Passthrough `avb::SlotVerifyError` with no `SlotVerifyData`.
+    AvbError(avb::SlotVerifyError<'static>),
     /// VBMeta has invalid descriptors.
     InvalidDescriptors(avb::IoError),
     /// Unknown vbmeta property.
     UnknownVbmetaProperty,
 }
 
-/// It's always possible to convert from an `avb::SlotVerifyError` since we are
-/// a superset.
-impl From<avb::SlotVerifyError> for PvmfwVerifyError {
+impl From<avb::SlotVerifyError<'_>> for PvmfwVerifyError {
     fn from(error: avb::SlotVerifyError) -> Self {
-        Self::AvbError(error)
+        // We don't use verification data on failure, drop it to get a `'static` lifetime.
+        Self::AvbError(error.without_verify_data())
     }
 }
 
diff --git a/pvmfw/avb/src/ops.rs b/pvmfw/avb/src/ops.rs
index c7b8b01..aee93c8 100644
--- a/pvmfw/avb/src/ops.rs
+++ b/pvmfw/avb/src/ops.rs
@@ -94,7 +94,7 @@
     pub(crate) fn verify_partition(
         &mut self,
         partition_name: &CStr,
-    ) -> Result<AvbSlotVerifyDataWrap, avb::SlotVerifyError> {
+    ) -> Result<AvbSlotVerifyDataWrap, avb::SlotVerifyError<'static>> {
         let requested_partitions = [partition_name.as_ptr(), ptr::null()];
         let ab_suffix = CStr::from_bytes_with_nul(NULL_BYTE).unwrap();
         let mut out_data = MaybeUninit::uninit();
@@ -292,7 +292,7 @@
 pub(crate) struct AvbSlotVerifyDataWrap(*mut AvbSlotVerifyData);
 
 impl TryFrom<*mut AvbSlotVerifyData> for AvbSlotVerifyDataWrap {
-    type Error = avb::SlotVerifyError;
+    type Error = avb::SlotVerifyError<'static>;
 
     fn try_from(data: *mut AvbSlotVerifyData) -> Result<Self, Self::Error> {
         is_not_null(data).map_err(|_| avb::SlotVerifyError::Io)?;
diff --git a/pvmfw/avb/src/verify.rs b/pvmfw/avb/src/verify.rs
index 492d387..3274033 100644
--- a/pvmfw/avb/src/verify.rs
+++ b/pvmfw/avb/src/verify.rs
@@ -94,7 +94,7 @@
 
 fn verify_only_one_vbmeta_exists(
     vbmeta_images: &[AvbVBMetaData],
-) -> Result<(), avb::SlotVerifyError> {
+) -> Result<(), avb::SlotVerifyError<'static>> {
     if vbmeta_images.len() == 1 {
         Ok(())
     } else {
@@ -104,7 +104,7 @@
 
 fn verify_vbmeta_is_from_kernel_partition(
     vbmeta_image: &AvbVBMetaData,
-) -> Result<(), avb::SlotVerifyError> {
+) -> Result<(), avb::SlotVerifyError<'static>> {
     match (vbmeta_image.partition_name as *const c_char).try_into() {
         Ok(PartitionName::Kernel) => Ok(()),
         _ => Err(avb::SlotVerifyError::InvalidMetadata),
@@ -113,7 +113,7 @@
 
 fn verify_vbmeta_has_only_one_hash_descriptor(
     descriptors: &Descriptors,
-) -> Result<(), avb::SlotVerifyError> {
+) -> Result<(), avb::SlotVerifyError<'static>> {
     if descriptors.num_hash_descriptor() == 1 {
         Ok(())
     } else {
@@ -125,7 +125,7 @@
     loaded_partitions: &[AvbPartitionData],
     partition_name: PartitionName,
     expected_len: usize,
-) -> Result<(), avb::SlotVerifyError> {
+) -> Result<(), avb::SlotVerifyError<'static>> {
     if loaded_partitions.len() != 1 {
         // Only one partition should be loaded in each verify result.
         return Err(avb::SlotVerifyError::Io);
@@ -140,7 +140,7 @@
     if loaded_partition.data_size == expected_len {
         Ok(())
     } else {
-        Err(avb::SlotVerifyError::Verification)
+        Err(avb::SlotVerifyError::Verification(None))
     }
 }
 
@@ -202,7 +202,7 @@
         } else if let Ok(result) = ops.verify_partition(PartitionName::InitrdDebug.as_cstr()) {
             (DebugLevel::Full, result, PartitionName::InitrdDebug)
         } else {
-            return Err(avb::SlotVerifyError::Verification.into());
+            return Err(avb::SlotVerifyError::Verification(None).into());
         };
     let loaded_partitions = initrd_verify_result.loaded_partitions()?;
     verify_loaded_partition_has_expected_length(
diff --git a/pvmfw/avb/tests/api_test.rs b/pvmfw/avb/tests/api_test.rs
index 6344433..84f83c2 100644
--- a/pvmfw/avb/tests/api_test.rs
+++ b/pvmfw/avb/tests/api_test.rs
@@ -211,7 +211,7 @@
         &load_latest_signed_kernel()?,
         /* initrd= */ &fs::read(UNSIGNED_TEST_IMG_PATH)?,
         &load_trusted_public_key()?,
-        avb::SlotVerifyError::Verification.into(),
+        avb::SlotVerifyError::Verification(None).into(),
     )
 }
 
@@ -234,7 +234,7 @@
         &kernel,
         &load_latest_initrd_normal()?,
         &load_trusted_public_key()?,
-        avb::SlotVerifyError::Verification.into(),
+        avb::SlotVerifyError::Verification(None).into(),
     )
 }
 
@@ -301,7 +301,7 @@
         &load_latest_signed_kernel()?,
         &initrd,
         &load_trusted_public_key()?,
-        avb::SlotVerifyError::Verification.into(),
+        avb::SlotVerifyError::Verification(None).into(),
     )
 }
 
@@ -340,13 +340,13 @@
         &kernel,
         &load_latest_initrd_normal()?,
         &empty_public_key,
-        avb::SlotVerifyError::Verification.into(),
+        avb::SlotVerifyError::Verification(None).into(),
     )?;
     assert_payload_verification_with_initrd_fails(
         &kernel,
         &load_latest_initrd_normal()?,
         &load_trusted_public_key()?,
-        avb::SlotVerifyError::Verification.into(),
+        avb::SlotVerifyError::Verification(None).into(),
     )
 }
 
@@ -384,7 +384,7 @@
         &kernel,
         &load_latest_initrd_normal()?,
         &load_trusted_public_key()?,
-        avb::SlotVerifyError::Verification.into(),
+        avb::SlotVerifyError::Verification(None).into(),
     )
 }