aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlessandro Astone <ales.astone@gmail.com>2019-05-04 20:06:48 +0200
committerSemavi Ulusoy <doc.divxm@gmail.com>2023-04-11 23:41:15 +0300
commitda0906a2a7110e61c71f017330e61423b0932035 (patch)
tree847bb2c0e48e6a0ccfce1ddc0885e364e37447ec
parentda9078a619be2c3bfbc9870f4d93acdae3804f28 (diff)
recovery: wipe bootloader message from index 0 when using custom offsets
* We may use a custom offset to: a) preserve data that oem wrote to the first bytes of misc b) skip recovery flags written by the bootloader (e.g. --wipe_data) For case a) one should set the offset 'x' to be at least greater than the size of bootloader_message struct (2048 bytes). If this is the case, then we zero out bytes x ~ x + 2047 For case b) one should set the offset to be strictly smaller than the size of bootloader_message struct. If this is the case, then we zero out bytes 0 ~ 2047. This allows to clear any additional flag set by the bootloader, that would otherwise be forgotten in misc. This also guarantees that we do not involountarily wipe any data that the oem may have written starting at byte 2048 (coff coff LG) Change-Id: I2d4e0702a2d8cbbef6274a87ce9499b0f69310dd
-rw-r--r--bootloader_message/bootloader_message.cpp5
1 files changed, 5 insertions, 0 deletions
diff --git a/bootloader_message/bootloader_message.cpp b/bootloader_message/bootloader_message.cpp
index 1ea56cd4..18ff886d 100644
--- a/bootloader_message/bootloader_message.cpp
+++ b/bootloader_message/bootloader_message.cpp
@@ -174,6 +174,11 @@ bool write_bootloader_message(const bootloader_message& boot, std::string* err)
bool clear_bootloader_message(std::string* err) {
bootloader_message boot = {};
+ if (BOOTLOADER_MESSAGE_OFFSET_IN_MISC < sizeof(bootloader_message)) {
+ std::string misc_blk_device = get_misc_blk_device(err);
+ if (misc_blk_device.empty()) return false;
+ return write_misc_partition(&boot, sizeof(boot), misc_blk_device, 0 /* offset */, err);
+ }
return write_bootloader_message(boot, err);
}