init: loading debug resources before chroot into first_stage_ramdisk am: 64e92f946f

Original change: https://android-review.googlesource.com/c/platform/system/core/+/1684655

Change-Id: Idedf53ec0e74a1fd12f4b883a7605200561d5ff3
This commit is contained in:
Bowgo Tsai 2021-04-28 18:19:47 +00:00 committed by Automerger Merge Worker
commit 20a73996fa

View file

@ -327,6 +327,19 @@ int FirstStageMain(int argc, char** argv) {
LOG(INFO) << "Copied ramdisk prop to " << dest;
}
// If "/force_debuggable" is present, the second-stage init will use a userdebug
// sepolicy and load adb_debug.prop to allow adb root, if the device is unlocked.
if (access("/force_debuggable", F_OK) == 0) {
std::error_code ec; // to invoke the overloaded copy_file() that won't throw.
if (!fs::copy_file("/adb_debug.prop", kDebugRamdiskProp, ec) ||
!fs::copy_file("/userdebug_plat_sepolicy.cil", kDebugRamdiskSEPolicy, ec)) {
LOG(ERROR) << "Failed to setup debug ramdisk";
} else {
// setenv for second-stage init to read above kDebugRamdisk* files.
setenv("INIT_FORCE_DEBUGGABLE", "true", 1);
}
}
if (ForceNormalBoot(cmdline, bootconfig)) {
mkdir("/first_stage_ramdisk", 0755);
// SwitchRoot() must be called with a mount point as the target, so we bind mount the
@ -337,28 +350,6 @@ int FirstStageMain(int argc, char** argv) {
SwitchRoot("/first_stage_ramdisk");
}
std::string force_debuggable("/force_debuggable");
std::string adb_debug_prop("/adb_debug.prop");
std::string userdebug_sepolicy("/userdebug_plat_sepolicy.cil");
if (IsRecoveryMode()) {
// Update these file paths since we didn't switch root
force_debuggable.insert(0, "/first_stage_ramdisk");
adb_debug_prop.insert(0, "/first_stage_ramdisk");
userdebug_sepolicy.insert(0, "/first_stage_ramdisk");
}
// If this file is present, the second-stage init will use a userdebug sepolicy
// and load adb_debug.prop to allow adb root, if the device is unlocked.
if (access(force_debuggable.c_str(), F_OK) == 0) {
std::error_code ec; // to invoke the overloaded copy_file() that won't throw.
if (!fs::copy_file(adb_debug_prop, kDebugRamdiskProp, ec) ||
!fs::copy_file(userdebug_sepolicy, kDebugRamdiskSEPolicy, ec)) {
LOG(ERROR) << "Failed to setup debug ramdisk";
} else {
// setenv for second-stage init to read above kDebugRamdisk* files.
setenv("INIT_FORCE_DEBUGGABLE", "true", 1);
}
}
if (!DoFirstStageMount(!created_devices)) {
LOG(FATAL) << "Failed to mount required partitions early ...";
}