Merge "Avoid using static mut variables." into main
diff --git a/libs/dice/open_dice/src/error.rs b/libs/dice/open_dice/src/error.rs
index 9089432..c9eb5cc 100644
--- a/libs/dice/open_dice/src/error.rs
+++ b/libs/dice/open_dice/src/error.rs
@@ -31,6 +31,8 @@
PlatformError,
/// Unsupported key algorithm.
UnsupportedKeyAlgorithm(coset::iana::Algorithm),
+ /// A failed fallible allocation. Used in no_std environments.
+ MemoryAllocationError,
}
/// This makes `DiceError` accepted by anyhow.
@@ -48,6 +50,7 @@
Self::UnsupportedKeyAlgorithm(algorithm) => {
write!(f, "Unsupported key algorithm: {algorithm:?}")
}
+ Self::MemoryAllocationError => write!(f, "Memory allocation failed"),
}
}
}
diff --git a/libs/dice/open_dice/src/retry.rs b/libs/dice/open_dice/src/retry.rs
index 6e75e91..803673d 100644
--- a/libs/dice/open_dice/src/retry.rs
+++ b/libs/dice/open_dice/src/retry.rs
@@ -13,9 +13,9 @@
// limitations under the License.
//! This module implements a retry version for multiple DICE functions that
-//! require preallocated output buffer. As the retry functions require
-//! memory allocation on heap, currently we only expose these functions in
-//! std environment.
+//! require preallocated output buffer. When running without std the allocation
+//! of this buffer may fail and callers will see Error::MemoryAllocationError.
+//! When running with std, allocation may fail.
use crate::bcc::{bcc_format_config_descriptor, bcc_main_flow, DiceConfigValues};
use crate::dice::{
@@ -62,6 +62,9 @@
let mut buffer = Vec::new();
match f(&mut buffer) {
Err(DiceError::BufferTooSmall(actual_size)) => {
+ #[cfg(not(feature = "std"))]
+ buffer.try_reserve_exact(actual_size).map_err(|_| DiceError::MemoryAllocationError)?;
+
buffer.resize(actual_size, 0);
f(&mut buffer)?;
}
diff --git a/tests/hostside/java/com/android/microdroid/test/MicrodroidHostTests.java b/tests/hostside/java/com/android/microdroid/test/MicrodroidHostTests.java
index 1873c2c..e8673ce 100644
--- a/tests/hostside/java/com/android/microdroid/test/MicrodroidHostTests.java
+++ b/tests/hostside/java/com/android/microdroid/test/MicrodroidHostTests.java
@@ -101,7 +101,7 @@
private static final String INSTANCE_IMG = TEST_ROOT + "instance.img";
private static final String INSTANCE_ID_FILE = TEST_ROOT + "instance_id";
- private static final String DEBUG_LEVEL_FULL = "full";
+ private static final String DEBUG_LEVEL_FULL = "full --enable-earlycon";
private static final String DEBUG_LEVEL_NONE = "none";
private static final int MIN_MEM_ARM64 = 170;
diff --git a/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_golden.dts b/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_golden.dts
index 095eb54..de9f7c5 100644
--- a/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_golden.dts
+++ b/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_golden.dts
@@ -49,7 +49,7 @@
};
chosen {
- bootargs = "panic=-1 crashkernel=17M";
+ bootargs = "panic=-1 crashkernel=17M earlycon=uart8250,mmio,0x3f8 keep_bootcon";
kaslr-seed = <>;
linux,initrd-end = <0x81200360>;
linux,initrd-start = <0x81000000>;
diff --git a/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_protected_golden.dts b/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_protected_golden.dts
index f2ebdf9..f09e4ff 100644
--- a/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_protected_golden.dts
+++ b/tests/hostside/java/com/android/microdroid/test/goldens/dt_dump_protected_golden.dts
@@ -49,7 +49,7 @@
};
chosen {
- bootargs = "panic=-1 crashkernel=31M";
+ bootargs = "panic=-1 crashkernel=31M earlycon=uart8250,mmio,0x3f8 keep_bootcon";
kaslr-seed = <>;
linux,initrd-end = <0x81202104>;
linux,initrd-start = <0x81000000>;
diff --git a/tests/testapk/Android.bp b/tests/testapk/Android.bp
index d0e045b..99300e2 100644
--- a/tests/testapk/Android.bp
+++ b/tests/testapk/Android.bp
@@ -173,6 +173,8 @@
"liblog",
"libprotobuf-cpp-lite-ndk",
],
+ // We've added support for updatable payloads in Android U.
+ min_sdk_version: "UpsideDownCake",
}
cc_library_shared {
diff --git a/tests/testapk/src/native/testbinary.cpp b/tests/testapk/src/native/testbinary.cpp
index 06c7e9d..2ab73a4 100644
--- a/tests/testapk/src/native/testbinary.cpp
+++ b/tests/testapk/src/native/testbinary.cpp
@@ -348,25 +348,40 @@
}
ScopedAStatus insecurelyReadPayloadRpData(std::array<uint8_t, 32>* out) override {
- int32_t ret = AVmPayload_readRollbackProtectedSecret(out->data(), 32);
- if (ret != 32) {
- return ScopedAStatus::fromServiceSpecificError(ret);
+ if (__builtin_available(android 36, *)) {
+ int32_t ret = AVmPayload_readRollbackProtectedSecret(out->data(), 32);
+ if (ret != 32) {
+ return ScopedAStatus::fromServiceSpecificError(ret);
+ }
+ return ScopedAStatus::ok();
+ } else {
+ return ScopedAStatus::fromExceptionCodeWithMessage(EX_SERVICE_SPECIFIC,
+ "not available before SDK 36");
}
- return ScopedAStatus::ok();
}
ScopedAStatus insecurelyWritePayloadRpData(
const std::array<uint8_t, 32>& inputData) override {
- int32_t ret = AVmPayload_writeRollbackProtectedSecret(inputData.data(), 32);
- if (ret != 32) {
- return ScopedAStatus::fromServiceSpecificError(ret);
+ if (__builtin_available(android 36, *)) {
+ int32_t ret = AVmPayload_writeRollbackProtectedSecret(inputData.data(), 32);
+ if (ret != 32) {
+ return ScopedAStatus::fromServiceSpecificError(ret);
+ }
+ return ScopedAStatus::ok();
+ } else {
+ return ScopedAStatus::fromExceptionCodeWithMessage(EX_SERVICE_SPECIFIC,
+ "not available before SDK 36");
}
- return ScopedAStatus::ok();
}
ScopedAStatus isNewInstance(bool* is_new_instance_out) override {
- *is_new_instance_out = AVmPayload_isNewInstance();
- return ScopedAStatus::ok();
+ if (__builtin_available(android 36, *)) {
+ *is_new_instance_out = AVmPayload_isNewInstance();
+ return ScopedAStatus::ok();
+ } else {
+ return ScopedAStatus::fromExceptionCodeWithMessage(EX_SERVICE_SPECIFIC,
+ "not available before SDK 36");
+ }
}
ScopedAStatus quit() override { exit(0); }
diff --git a/tests/vmshareapp/Android.bp b/tests/vmshareapp/Android.bp
index 5f6dc57..86c48f6 100644
--- a/tests/vmshareapp/Android.bp
+++ b/tests/vmshareapp/Android.bp
@@ -13,4 +13,8 @@
"MicrodroidPayloadInOtherAppNativeLib",
],
min_sdk_version: "34",
+ sdk_version: "system_current",
+ // Ideally we should set something "latest finalized sdk version" here.
+ // However, soong doesn't seem to provide such functionality.
+ target_sdk_version: "VanillaIceCream",
}