diff --git a/init/reboot_utils.cpp b/init/reboot_utils.cpp index dac0cf4ae..485188ba0 100644 --- a/init/reboot_utils.cpp +++ b/init/reboot_utils.cpp @@ -34,12 +34,16 @@ namespace android { namespace init { static std::string init_fatal_reboot_target = "bootloader"; +static bool init_fatal_panic = false; void SetFatalRebootTarget() { std::string cmdline; android::base::ReadFileToString("/proc/cmdline", &cmdline); cmdline = android::base::Trim(cmdline); + const char kInitFatalPanicString[] = "androidboot.init_fatal_panic=true"; + init_fatal_panic = cmdline.find(kInitFatalPanicString) != std::string::npos; + const char kRebootTargetString[] = "androidboot.init_fatal_reboot_target="; auto start_pos = cmdline.find(kRebootTargetString); if (start_pos == std::string::npos) { @@ -133,6 +137,9 @@ void __attribute__((noreturn)) InitFatalReboot(int signal_number) { for (size_t i = 0; i < backtrace->NumFrames(); i++) { LOG(ERROR) << backtrace->FormatFrameData(i); } + if (init_fatal_panic) { + _exit(signal_number); + } RebootSystem(ANDROID_RB_RESTART2, init_fatal_reboot_target); }