aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoy Luo <royluo@google.com>2024-04-05 18:06:52 +0000
committerRoy Luo <royluo@google.com>2024-04-05 18:11:24 +0000
commitcdcdf52e7cc75082ebe337aa133176954bdcb4a2 (patch)
treefea163bacca5b5959d0aa25af22e40fa3adbe7de
parent5aee6aca72b7cbf53566c91eb5734716a8286d3f (diff)
downloadrecovery-cdcdf52e7cc75082ebe337aa133176954bdcb4a2.tar.gz
recovery: do not update bootloader message for boot-fastboot
When booting to fastbootd using bootloader message: boot.command=boot-fastboot, the boot command get overwritten to boot-recovery by update_bootloader_message. If the daemon crash for whatever reason before the bootloader message got clear, the daemon would start in adb recovery mode instead of fastbootd after it respawns. Only update bootloader message for boot-recovery command. Bug: 332973437 Test: boot to fastbootd Change-Id: I5747c62cf50d2347894d266f2665035f15ae5da0
-rw-r--r--recovery_main.cpp10
1 files changed, 7 insertions, 3 deletions
diff --git a/recovery_main.cpp b/recovery_main.cpp
index cb3f0c13..903a3173 100644
--- a/recovery_main.cpp
+++ b/recovery_main.cpp
@@ -155,9 +155,13 @@ static std::vector<std::string> get_args(const int argc, char** const argv, std:
// Write the arguments (excluding the filename in args[0]) back into the
// bootloader control block. So the device will always boot into recovery to
// finish the pending work, until FinishRecovery() is called.
- std::vector<std::string> options(args.cbegin() + 1, args.cend());
- if (!update_bootloader_message(options, &err)) {
- LOG(ERROR) << "Failed to set BCB message: " << err;
+ // This should only be done for boot-recovery command so that other commands
+ // won't be overwritten.
+ if (boot_command == "boot-recovery") {
+ std::vector<std::string> options(args.cbegin() + 1, args.cend());
+ if (!update_bootloader_message(options, &err)) {
+ LOG(ERROR) << "Failed to set BCB message: " << err;
+ }
}
// Finally, if no arguments were specified, check whether we should boot