From cdcdf52e7cc75082ebe337aa133176954bdcb4a2 Mon Sep 17 00:00:00 2001 From: Roy Luo Date: Fri, 5 Apr 2024 18:06:52 +0000 Subject: [PATCH] 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 --- recovery_main.cpp | 10 +++++++--- 1 file 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 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 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 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