summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJidong Sun <jidong@google.com>2022-06-03 14:42:05 -0700
committerJidong Sun <jidong@google.com>2022-06-08 20:21:58 +0000
commit9ecd004e6bf34260c17c39bb29d0a718fa01cd1f (patch)
tree0d8ad1a79b6ad1a4340fe8e4f9b221c302f9aece
parent29c8d8c5ff707647fe69268da1c6e1477edc6f9e (diff)
downloadgs101-9ecd004e6bf34260c17c39bb29d0a718fa01cd1f.tar.gz
BootControl: blow AR on boot complete
Bug: 232277507 Signed-off-by: Jidong Sun <jidong@google.com> Change-Id: I684bc259407b3cbaa5dda9fdc16158d7bd4b4e02
-rw-r--r--interfaces/boot/1.2/BootControl.cpp19
1 files changed, 18 insertions, 1 deletions
diff --git a/interfaces/boot/1.2/BootControl.cpp b/interfaces/boot/1.2/BootControl.cpp
index a28be05a..6c480bb6 100644
--- a/interfaces/boot/1.2/BootControl.cpp
+++ b/interfaces/boot/1.2/BootControl.cpp
@@ -49,6 +49,8 @@ namespace {
#define BOOT_B_PATH "/dev/block/by-name/boot_b"
#define DEVINFO_PATH "/dev/block/by-name/devinfo"
+#define BLOW_AR_PATH "/sys/kernel/boot_control/blow_ar"
+
// slot flags
#define AB_ATTR_PRIORITY_SHIFT 52
#define AB_ATTR_PRIORITY_MASK (3UL << AB_ATTR_PRIORITY_SHIFT)
@@ -174,6 +176,11 @@ static void DevInfoInitSlot(devinfo_ab_slot_data_t &slot_data) {
slot_data.fastboot_ok = 0;
}
+static bool blowAR() {
+ android::base::unique_fd fd(open(BLOW_AR_PATH, O_WRONLY | O_DSYNC));
+ return android::base::WriteStringToFd("1", fd);
+}
+
} // namespace
// Methods from ::android::hardware::boot::V1_0::IBootControl follow.
@@ -211,7 +218,17 @@ Return<void> BootControl::markBootSuccessful(markBootSuccessful_cb _hidl_cb) {
ret = setSlotFlag(getCurrentSlot(), AB_ATTR_SUCCESSFUL);
}
- !ret ? _hidl_cb({false, "Failed to set successful flag"}) : _hidl_cb({true, ""});
+ if (!ret) {
+ _hidl_cb({false, "Failed to set successful flag"});
+ return Void();
+ }
+
+ if (!blowAR()) {
+ ALOGE("Failed to blow anti-rollback counter");
+ // Ignore the error, since ABL will re-trigger it on reboot
+ }
+
+ _hidl_cb({true, ""});
return Void();
}