summaryrefslogtreecommitdiffstats
path: root/bootloader_message/bootloader_message.cpp
diff options
context:
space:
mode:
authorDavid Anderson <dvander@google.com>2019-11-09 16:17:15 +0100
committerandroid-build-merger <android-build-merger@google.com>2019-11-09 16:17:15 +0100
commit80415b0f402f3b87f477c2048cdc4aca04bfcf74 (patch)
tree40e458944784f65d11efaba8702a8ef25945587a /bootloader_message/bootloader_message.cpp
parentMerge "Stop setting usb config from recovery init script" am: 6105aa1a4a (diff)
parentMerge "bootloader_message: Add helpers for handling IBootControl MergeStatus." (diff)
downloadandroid_bootable_recovery-80415b0f402f3b87f477c2048cdc4aca04bfcf74.tar
android_bootable_recovery-80415b0f402f3b87f477c2048cdc4aca04bfcf74.tar.gz
android_bootable_recovery-80415b0f402f3b87f477c2048cdc4aca04bfcf74.tar.bz2
android_bootable_recovery-80415b0f402f3b87f477c2048cdc4aca04bfcf74.tar.lz
android_bootable_recovery-80415b0f402f3b87f477c2048cdc4aca04bfcf74.tar.xz
android_bootable_recovery-80415b0f402f3b87f477c2048cdc4aca04bfcf74.tar.zst
android_bootable_recovery-80415b0f402f3b87f477c2048cdc4aca04bfcf74.zip
Diffstat (limited to 'bootloader_message/bootloader_message.cpp')
-rw-r--r--bootloader_message/bootloader_message.cpp43
1 files changed, 43 insertions, 0 deletions
diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp
index f838930fd..4f7085db9 100644
--- a/bootloader_message/bootloader_message.cpp
+++ b/bootloader_message/bootloader_message.cpp
@@ -292,6 +292,49 @@ bool WriteMiscPartitionVendorSpace(const void* data, size_t size, size_t offset,
err);
}
+static bool ValidateSystemSpaceRegion(size_t offset, size_t size, std::string* err) {
+ if (size <= SYSTEM_SPACE_SIZE_IN_MISC && offset <= (SYSTEM_SPACE_SIZE_IN_MISC - size)) {
+ return true;
+ }
+ *err = android::base::StringPrintf("Out of bound access (offset %zu size %zu)", offset, size);
+ return false;
+}
+
+static bool ReadMiscPartitionSystemSpace(void* data, size_t size, size_t offset, std::string* err) {
+ if (!ValidateSystemSpaceRegion(offset, size, err)) {
+ return false;
+ }
+ auto misc_blk_device = get_misc_blk_device(err);
+ if (misc_blk_device.empty()) {
+ return false;
+ }
+ return read_misc_partition(data, size, misc_blk_device, SYSTEM_SPACE_OFFSET_IN_MISC + offset,
+ err);
+}
+
+static bool WriteMiscPartitionSystemSpace(const void* data, size_t size, size_t offset,
+ std::string* err) {
+ if (!ValidateSystemSpaceRegion(offset, size, err)) {
+ return false;
+ }
+ auto misc_blk_device = get_misc_blk_device(err);
+ if (misc_blk_device.empty()) {
+ return false;
+ }
+ return write_misc_partition(data, size, misc_blk_device, SYSTEM_SPACE_OFFSET_IN_MISC + offset,
+ err);
+}
+
+bool ReadMiscVirtualAbMessage(misc_virtual_ab_message* message, std::string* err) {
+ return ReadMiscPartitionSystemSpace(message, sizeof(*message),
+ offsetof(misc_system_space_layout, virtual_ab_message), err);
+}
+
+bool WriteMiscVirtualAbMessage(const misc_virtual_ab_message& message, std::string* err) {
+ return WriteMiscPartitionSystemSpace(&message, sizeof(message),
+ offsetof(misc_system_space_layout, virtual_ab_message), err);
+}
+
extern "C" bool write_reboot_bootloader(void) {
std::string err;
return write_reboot_bootloader(&err);